【问题标题】:Setting environment variables for Phusion Passenger applications为 Phusion 乘客应用程序设置环境变量
【发布时间】:2010-09-09 22:02:05
【问题描述】:

我已经在开发中设置了Passenger (Mac OS X),它可以完美运行。唯一的问题是后来出现的:现在我在"/usr/local" 中安装了一个自定义的GEM_HOME 路径和ImageMagick 二进制文件。我可以将它们放在获取源的 shell rc 文件之一中,这解决了从控制台生成的进程的环境变量;但是乘客呢?以这种方式运行时,同一个应用程序找不到我的 gem。

【问题讨论】:

  • 更新:自乘客 2.2.3 起,“SetEnv 指令得到支持:blog.phusion.nl/2009/06/17/… 正确。Ben 的回答对我很有帮助,但现在不再需要使用它了(在大多数情况下) .

标签: ruby-on-rails ruby passenger env


【解决方案1】:

我也遇到过这个问题。 appears,Passenger 没有通过使用 SetEnv apache 指令设置的值 - 这是不幸的。

也许可以在您的 environment.rb 或 boot.rb 中设置环境变量(假设您正在谈论 Rails 应用程序;我不熟悉 Rack,但大概它具有类似的功能)

【讨论】:

    【解决方案2】:

    在你做任何要求之前(尤其是在要求 ruby​​gems 之前)你可以这样做:

    ENV['GEM_HOME'] = '/foo'
    

    这将更改此进程内的环境变量。

    【讨论】:

      【解决方案3】:

      我知道两种解决方案。第一个(记录在here)与manveru 的基本相同——直接在您的代码中设置ENV 变量。

      第二个是围绕Passenger使用的Ruby解释器创建一个包装器,并记录在here(查找passenger_with_ruby)。要点是您创建(并在您的 Apache 配置中将PassengerRuby 指向)/usr/bin/ruby_with_env,这是一个包含以下内容的可执行文件:

      #!/bin/bash
      export ENV_VAR=value
      /usr/bin/ruby $*
      

      两者都有效;我认为,前一种方法不那么骇人听闻。

      【讨论】:

      • 以防万一其他人遇到与我相同的问题:不要忘记chmod +x /usr/bin/ruby_with_env
      • 由于这是一个旧答案,我只想确认这个答案似乎仍然是处理此问题的推荐方法。更多参考:blog.phusion.nl/2008/12/16/… 和:dev.mensfeld.pl/2011/09/…
      • 最近看起来这种情况发生了变化。从 Phusion 4.0 开始,您可以使用 Apache 指令 'PassEnv' 和 'SetEnv':modrails.com/documentation/…
      【解决方案4】:

      我发现如果你在计算机上有root权限,那么你可以在“envvars”文件中设置必要的环境变量,apachectl会在启动Apache之前执行这个文件。

      envvars 通常位于 apachectl 所在的同一目录中 - 在 Mac OS X 上,它位于 /usr/sbin。如果找不到,请查看 apachectl 脚本的源代码。

      更改 envvars 文件后,使用“apachectl -k restart”重新启动 Apache。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-05-19
        • 1970-01-01
        • 2016-10-08
        • 2014-08-02
        • 2012-06-08
        • 2017-11-14
        • 2014-08-04
        • 2021-05-27
        相关资源
        最近更新 更多