用Bundler安装Gems ==大问题

如果我运行bundle install ,一切都会通过。 我重新启动nginx,当我访问该网站时,我看到乘客错误:

 git://github.com/spree/spree.git (at master) is not checked out. Please run `bundle install` (Bundler::GitError) 

我的gemfile:

 source 'http://rubygems.org' gem 'rails', '3.0.3' gem 'spree', :git => 'git://github.com/spree/spree.git' gem 'haml' gem 'ruby-debug' gem 'sqlite3', :require => 'sqlite3' gem 'ckeditor', '3.4.2.pre' gem "aged_revolt", :require => "aged_revolt", :path => "aged_revolt" gem "spree_easy_contact", '1.0.2', :path => "#{File.expand_path(__FILE__)}/../vendor/gems/spree_easy_contact-1.0.2" gem "honeypot-captcha" 

当我运行bundle show spree

 /home/shadyfront/.rvm/gems/ruby-1.8.7-p330@revolting_gems/bundler/gems/spree-44e4771f3a2a 

任何想法如何/为什么这是发生,我怎么能通过这个?

这是我的nginx.conf:

 env GEM_HOME=/home/shadyfront/.rvm/gems/ruby-1.8.7-p330@revolting_gems; worker_processes 1; events { worker_connections 1024; } http { access_log /home/shadyfront/logs/user/access_revolting_age.log combined; error_log /home/shadyfront/logs/user/error_revolting_age.log crit; include mime.types; passenger_root /home/shadyfront/webapps/revolting_age/gems/gems/passenger-2.2.15; passenger_ruby /home/shadyfront/webapps/revolting_age/bin/ruby; sendfile on; passenger_max_instances_per_app 1; rails_spawn_method conservative; passenger_max_pool_size 2; server { listen 56943; passenger_enabled on; root /home/shadyfront/webapps/revolting_age/releases/20110215175319/public; server_name localhost; } } 

在处理基于git的宝石时,这个问题似乎是乘客或打包商的错误。 这个 “解决方案”(我正在写供应商而不是供应商……)让我的乘客现在正在运行:

  1. 捆绑包
  2. 软件包安装 – 路径供应商/缓存

我认为http://www.ruby-forum.com/topic/213962是同样的问题,据我所知,这并没有解决。 可能会很快修复这个错误…

你确定这不是你的版本#疯狂的问题吗? 没有我在github上看到的标签或版本“0.50.99”。

编辑:

我唯一能想到的其他事情是,由于spree是其他gem依赖项的容器,bundler不喜欢以这种方式定义需求。

一个git仓库应该至少有一个文件,位于包含gem的目录的根目录下,扩展名为.gemspec。 这个文件必须包含一个有效的gem规范,正如gem build命令所期望的那样。 除了git仓库本身的文件和Ruby或Rubygems的任何内置功能之外,它不能有任何依赖关系。

这来自bundler的manpage 。

那是因为你还必须在你的nginx启动脚本中定位gem位置(特别是bundler的安装位置)。

斌/启动

 #!/bin/bash TMPDIR=/home/shadyfront/webapps/truejersey/tmp GEM_HOME=/home/shadyfront/.rvm/gems/ruby-1.8.7-p330@true /home/shadyfront/webapps/truejersey/nginx/sbin/nginx -p /home/shadyfront/webapps/truejersey/nginx/ 

我在2015年2月面对这个问题,并在项目目录本地安装gem修复它给我。

  $ bundle install --path vendor/bundle 

最简单的解决方法是通过运行在本地安装所有宝石

 bundle install --path vendor/bundle 

简洁的方法是将宝石保存在GEM_HOME(例如可能由rvm管理)中,并指向vendor / bundle的这个目录:

一步步:

  • 在你的项目中创建一个目录vendor/bundle/ruby/
  • 从命令行创建一个符号链接(用你的ruby版本替换2.1.0):

     ln -s $GEM_HOME 2.1.0 
  • 确保您的项目目录中包含该行的文件.bundle/config

     BUNDLE_PATH: vendor/bundle 

而已。 您现在可以像往常一样继续使用“捆绑安装”,但也会正确引用git gems。