【问题标题】:Passenger with Nginx cannot find rails 2.3.8 gem使用 Nginx 的乘客找不到 rails 2.3.8 gem
【发布时间】:2010-09-14 10:56:10
【问题描述】:

几天来,我一直在尝试与乘客一起设置 nginx,但一直遇到问题。当我使用浏览器访问 Rails 应用程序时,它显示:Missing the Rails 2.3.8 gem. Please gem install -v=2.3.8 rails, update your RAILS_GEM_VERSION setting in config/environment.rb for the Rails version you do have installed, or comment out RAILS_GEM_VERSION to use the latest version installed.

如果我在终端输入gem list,它会显示:rails (3.0.0, 2.3.8, 2.3.5)

有趣的是,当我在同一台机器上使用 Apache 时,乘客会发现我的 ruby​​ gem 很好!但我想尝试使用 nginx,因为 Apache 没有做我想做的事。

机器是Ubuntu 10.04 Server

  • which ruby 显示:/usr/local/bin/ruby (REE)
  • 这些是 nginx.conf 中的乘客指令:
    • passenger_root /usr/local/lib/ruby/gems/1.8/gems/passenger-2.2.15; passenger_ruby /usr/local/bin/ruby;

【问题讨论】:

  • Nginx 和Passenger 有哪些版本? (我在 gem 路径中看到了Passenger 2.2.15。)你确定Passenger 正确地从Nginx 获取了所有相关的配置指令吗?

标签: ruby-on-rails ruby nginx passenger


【解决方案1】:

@Nik Rishav 是正确的,在系统 Ruby 旁边安装 Ruby Enterprise Edition (REE) 时必须小心。错误地安装 REE 会导致一些非常奇怪的事情发生。

虽然 Rails 3.0 可能是导致您出现问题的原因,但我的直觉告诉我,您真正的问题是安装 REE 时遗漏了一步。但是,以防万一这不起作用,快速的 Google 搜索会向您显示任意数量的优秀教程,向您展示 how to host a Rails app with Phusion Passenger for Nginx。好吧,让我们试一试吧!

REE 与系统 Ruby 一起运行良好,但您必须将其安装到它自己的目录中。例如:

/opt/ruby-enterprise-X.X.X/bin/ruby

您的另一个选择是仅安装 REE,但这可能不适合您。我怀疑当 Nginx 运行时,它确实找到了你指定的 REE。您是否从 REE 堆栈安装了 Nginx 乘客?

/opt/ruby-enterprise-X.X.X/bin/passenger-install-apache2-module

如果你没有,你可能想调查一下。我假设你做到了。

根据您的描述,您似乎没有告诉 REE 在哪里可以找到您的宝石。为此,您需要将 REE 设置为默认的 Ruby 解释器。为此,请在文件 /etc/environment 中添加一个条目。在 Ubuntu 上,目录是 /etc/environment。将 REE 的 bin 目录添加到 PATH 环境变量中,如下所示:

PATH="/opt/ruby-enterprise-x.x.x/bin:/usr/local/sbin:/usr/local/bin"

将 REE 先放在 PATH 中会将其设置为默认的 Ruby 解释器。

然后重启Nginx,像这样:

sudo /etc/init.d/nginx restart

希望这会有所帮助。我遇到了一些部署问题,这确实令人沮丧。不希望任何人...祝你好运!

【讨论】:

  • 嗯,也许我应该在虚拟机上从头开始,看看我是否可以完成所有步骤而不会错过它们。我以为 REE 安装在我机器上的 /usr/local/bin/ruby 下,而 Ruby 安装在 /usr/bin/ruby 下。我认为您删除红宝石标准并自行尝试 REE 是正确的。它会将其减少为可能导致问题的活动较少的部件。
【解决方案2】:

作为检查,您确定您的乘客安装了正确版本的 ruby​​。基本上

两个红宝石都有单独的宝石,这意味着你必须将另一个安装在一个中。

检查 /usr/local/lib/ruby/gems/1.8/gems 目录以查看 rails 2.3.8 是否存在。您需要将它安装在这个 ruby​​ 中。

两个 rubies 都有单独的 gem bin 文件用于安装..

可能 /usr/bin/gem 用于系统 ruby 和 /usr/local/bin/gem 用于安装 REE

【讨论】:

  • 当我检查 /usr/local/lib/ruby/gems/1.8/gems 时,它显示了 rails 2.3.8 gem。当我输入“which gem”时,它显示 /usr/local/bin/gem
  • 嗯,rails 3 + 最新机架版本可能会导致问题。只是为了测试,删除 rails 3 和最新的机架版本.. 我会在我的机器上试试这个,让你知道。如果这不起作用.. 在 irc 上尝试#passenger,
  • 当我这样做时,我得到:缺少 Rails gem。请gem install -v= rails
  • 当乘客在 nginx 下加载时,几乎就像 ruby​​ 找不到我的宝石一样。不过apache2下没问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-10
  • 2011-04-06
  • 1970-01-01
  • 2012-11-07
  • 1970-01-01
  • 2018-02-14
相关资源
最近更新 更多