Rails 3:乘客找不到捆绑程序安装的 git gem

Posted

技术标签:

【中文标题】Rails 3:乘客找不到捆绑程序安装的 git gem【英文标题】:Rails 3: Passenger can't find git gems installed by bundler 【发布时间】:2011-04-06 00:51:46 【问题描述】:

铁路 3.0.0,乘客 2.2.15:

创建一个新的 Rails 项目 添加gem 'paperclip', :git => 'git://github.com/lmumar/paperclip.git', :branch => 'rails3' 到您的 Gemfile 做bundle install 一切正常,从 rails/script server 开始 & 访问也可以 但是,当使用乘客访问时,它会说:

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

我已尝试在 .htaccess 和 config/*.rb 中的各个位置将 BUNDER_HOME 设置为 ~/.bundler (bundler install 将 Paperclip git 安装在那里)并尝试了 bundler pack(没有帮助),但是这也不成功。

~/.bundler 与 Rails 项目属于同一用户(Passenger 在此用户下运行),因此不会是权限问题。 sudo 由bundle install 安装和调用。

有什么提示吗?

【问题讨论】:

这不是serverfault 的更好选择吗,因为它处理设置nginxapache 我不明白。我在使用 Apache 时遇到了乘客问题。 bundle pack 解决我的问题。 ***.com/questions/2494399/… 【参考方案1】:

我以前也有这个问题,用解决方法

bundle --deployment

这会将 gem 安装到 vendor/bundle 中

【讨论】:

这很好用,谢谢。文档说它是shouldn't be used for development,所以在开发机器上你会使用bundle install --path vendor/bundle 我不希望我的 gems 在我的 git 存储库中。 "当您使用 --deployment 标志时,Bundler 会确保您需要的每个 gem 都被供应商,即它们被复制到应用程序文件夹结构的预定位置(恰好是 Rails 中的供应商/捆绑包)按照惯例)这对两件事有好处......“***.com/questions/3681329/… bundle --deployment 在安装nokogiri 时对我来说失败(我使用的是Bitnami Rubystack,所以每次安装nokogiri 我都会显式传递xml2 和xml2-include 目录,我该如何传递这些参数到bundle --deployment? @TheDoctorWhat 这就是.gitignore 的用途。【参考方案2】:

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

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

--- 
BUNDLE_PATH: /home/xxxxx/.bundler

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

即使从乘客加载,捆绑程序也会识别正确的路径。没有Passenger,它总是有效(并使用/home/xxxxx/.bundler,如问题中所述)

【讨论】:

拯救了我的一天!感谢分享。 还有我的!非常感谢。顺便说一句,我把 DISABLED_SHARED_GEMS=1 留在了原地。 在将配置选项添加到 .bundle/config 然后重新运行 bundle install 之前,我的家中没有 .bundler 目录。在我这样做之后,我有了目录并且乘客能够找到捆绑的宝石。 @orangechicken 谢谢!这对我有用。唯一的细节是我必须在运行服务器进程的用户的主文件夹中创建文件夹 这有改变吗?我在我的设置中没有看到 .bundle 目录【参考方案3】:

您可以使用bundle install --path vendor/bundle 在本地安装gem,而不是安装到系统gem 中。

不过,如果您想继续使用系统 gem,只需在 Apache 配置中的一行代码告诉Passenger 在哪里可以找到您的系统 gem:

SetEnv GEM_HOME /Users/bob/.bundle

在我的博客 Using Passenger with GEM_HOME set 上有一篇稍微详细的文章

【讨论】:

使用passenger/nginx出售我的宝石对我不起作用:( 我不希望我的 gems 在我的 git 存储库中。【参考方案4】:

我在编写 Sinatra 应用程序时遇到了这个问题。为了解决这个问题,我将此行添加到 config.ru

require 'bundler/setup'

【讨论】:

【参考方案5】:

我遇到了同样的问题,这是由于 RVM 的权利问题。

运行 Web 服务器的用户无法检查 GIT gem 是否可用。 作为使用web用户运行的“Passenger”,它不能做这个检查。

我找到的解决方案是将网络用户添加到 rvm 组:

usermod -a -G rvm apache

我希望这会帮助一些不想将 GEM 部署到“供应商/捆绑包”中的其他人。

【讨论】:

【参考方案6】:

我以 sudo 用户的身份安装了乘客 gem 及其 apache 模块,这就是我的问题。

我最初使用 sudo 的原因是我从 railscasts 的第 122 集复制了代码。在没有 sodu 访问权限的情况下安装它解决了这个问题。由于 Ruby 是使用 rvm 安装的,因此我的系统上没有 sudo 访问权限。

【讨论】:

以上是关于Rails 3:乘客找不到捆绑程序安装的 git gem的主要内容,如果未能解决你的问题,请参考以下文章

安装 Phusion 乘客时出错“在 [] (Gem::LoadError) 中找不到乘客 (>= 0)”

Rails:Gemfile.lock 需要“找不到捆绑程序”(2.2.11)。 (Gem::GemNotFoundException)

每当Rails cron,捆绑:找不到命令

我的 ec2 实例中乘客日志文件的位置(弹性 beantalk + rails)

Bundler 找不到 gem "rails" 的兼容版本:用于狂欢

Rails 3.1 和 Coffeescript 出现“找不到变量”错误