【问题标题】:How can I get Phusion Passenger to use the correct version of Ruby? [closed]如何让 Phusion Passenger 使用正确版本的 Ruby? [关闭]
【发布时间】:2011-11-28 14:45:09
【问题描述】:

我的同事有一个使用 Nginx、Phusion Passenger 和 RVM 的 Rails 开发环境。当他尝试加载一个项目时,它抱怨说它需要的 Ruby 版本与可用版本不同:

The given ruby environment requires ruby-1.9.2-p290 (versus ree-1.8.7-2011.03) (RVM::IncompatibleRubyError)

我们正在从 REE 切换到 MRI Ruby。以下是我目前检查过的内容:

  • 该目录中的.rvmrcrvm use --create default@ourapp
  • rvm list default 返回ruby-1.9.2-p290
  • 我们已更改并返回目录并看到它说它使用的是 1.9.2
  • 据我所知,nginx 的配置文件正确设置了passenger_rootpassenger_ruby
  • Passenger 已使用 Ruby 1.9.2 编译。

我还有什么遗漏的吗?

【问题讨论】:

  • 这个问题最终对他的设置非常具体,我怀疑这对其他人有用。由于我不能再删除它,我投票决定将其关闭,因为它“过于本地化”。
  • 是的,但是注释指向做文档仍然有效:)

标签: ruby-on-rails ruby rvm passenger


【解决方案1】:

尝试阅读文档?

https://www.phusionpassenger.com/documentation_and_support#documentation

您可以通过为 rvm 命令指定 --passenger 来使用包装器,并告诉 Apache 或 Nginx 使用它生成的包装器。 Ruby 没有“编译”。

这只会给你一个 rvm 实例,但它会起作用。

对于多个 RVM,我发现唯一可行的解​​决方案是使用 Unicorn 并反向代理正在运行的 unicorn 进程。 Unicorn 可以正常扩展并且是一个成熟的 unix 公民 - 这是我个人用于生产的东西。

编辑——刚刚注意到,Passenger 3 对 RVM 更友好一些(如上面的文档中所述)——但您仍然需要针对包装器运行。

在 Mac 上,对于开发人员,37 Signals 有一个称为 POW 的替代方案,可以轻松配置开发环境。

【讨论】:

  • 链接已更新以指向新站点
【解决方案2】:

Passenger 必须使用特定版本的 Ruby 进行编译,并且从那时起就被锁定在该版本中。您不能只在 RVM 中切换它而不运行 passenger-install-X-module 方案。

【讨论】:

  • 很好,但我错了——Passenger 是用 Ruby 1.9.2 编译的。更新的问题。
【解决方案3】:

如果您真的想使用不同的 rubies 并尊重 RVM,请使用 apache + unicorn。为 apache 安装 mod_proxy 和 mod_rewrite 模块,使用 unicorn.conf 设置 unicorn_rails 并运行“unicorn_rails -E production -D -c config/unicorn.conf”。这是假设您将 unicorn 的配置放在 rails 应用程序的配置目录中。

【讨论】:

    猜你喜欢
    • 2015-04-04
    • 1970-01-01
    • 1970-01-01
    • 2022-11-23
    • 2021-11-16
    • 2011-01-22
    • 1970-01-01
    • 1970-01-01
    • 2010-09-12
    相关资源
    最近更新 更多