Rails 3:Passenger无法找到bundler安装的git gem

jun*_*que 46 ruby-on-rails passenger bundler ruby-on-rails-3

Rails 3.0.0,乘客2.2.15:

  • 创建一个新的Rails项目
  • 添加gem 'paperclip', :git => 'git://github.com/lmumar/paperclip.git', :branch => 'rails3' 到您的Gemfile
  • bundle install
  • 一切正常,从rails/script server&access 开始也有效
  • 但是,在使用Passenger访问时,它说:

未检出git://github.com/lmumar/paperclip.git(在rails3).请运行bundle install(Bundler :: GitError)

我曾尝试bundler pack(不利于)和设置BUNDER_HOME到〜/ .bundler(回纹针的git得到由安装有bundler install在.htaccess和不同的地方)在配置/*.RB,但没有成功,太.

〜/ .bundler是由相同的用户Rails项目(客运此用户下运行)所拥有,所以它不可能是一个权限问题.sudo已安装并调用bundle install.

任何提示?

Rob*_*rto 70

我以前有这个问题,解决使用

bundle --deployment
Run Code Online (Sandbox Code Playgroud)

这将在vendor/bundle中安装gem

  • "当您使用--deployment标志时,Bundler确保您需要的每个宝石都被出售,即它们被复制到您应用程序的文件夹结构的预定位置(按照惯例,它恰好是Rails中的供应商/捆绑包)这对于两个事情..."http://stackoverflow.com/questions/3681329/rails-3s-bundle-install-and-bundle-install-deployment-both-work-well-exce/3681411#3681411 (5认同)
  • 我不希望我的git存储库中有我的宝石. (4认同)

jun*_*que 22

解决方案(花了我几个小时):

确保RAILS_ROOT/.bundle/config(SetEnv等对我不起作用)包含:

--- 
BUNDLE_PATH: /home/xxxxx/.bundler
Run Code Online (Sandbox Code Playgroud)

注意BUNDLE_PATH,而不是BUNDLER_PATH!还有一个DISABLED_SHARED_GEMS = 1条目,我删除了它.

然后,即使从Passenger加载,bundler也会识别正确的路径.没有乘客,它总是工作(并使用/home/xxxxx/.bundler,如问题中所述)


ind*_*ect 8

您可以使用bundle install --path vendor/bundle本地安装gem,而不是系统gems.

但是,如果您想继续使用系统宝石,那么Apache配置中只有一行可以告诉Passenger在哪里可以找到您的系统宝石:

SetEnv GEM_HOME /Users/bob/.bundle
Run Code Online (Sandbox Code Playgroud)

使用GEM_HOME设置的Using Passenger时,我的博客上有一篇更精细的文章