【问题标题】:Rails app deployed on Centos w/ standalone Passenger and Capistrano can't access ENV variables部署在具有独立乘客和 Capistrano 的 Centos 上的 Rails 应用程序无法访问 ENV 变量
【发布时间】:2016-10-10 20:00:15
【问题描述】:

我使用本教程(独立乘客)和 RVM 设置了 Centos 7 VM。我正在通过 Capistrano 部署 rails 应用程序。

https://www.phusionpassenger.com/library/walkthroughs/deploy/ruby/ownserver/standalone/oss/install_language_runtime.html

似乎一切正常,除了我在哪里设置环境变量,在 Rails 中无法读取 ENV["myvar"]。

我已经尝试将export myvar=test SSHed 作为“部署者”以及 root。我也尝试将它添加到 bashrc。如果我以部署者身份登录并执行以下操作:

#symlink to current capistrano deploy
cd ~/rails/railsapp/current/
rails r "puts ENV['myvar']"

它给了我正确的 ENV 输出。但是,如果我尝试通过 capistrano rails 应用程序从我的实际部署中输出 ENV['myvar'],我什么也得不到。

我应该在哪里设置这些 ENV 变量?我知道 rails 中的 ENV var 已正确完成,因为部署到 heroku 以及我的开发机器上的应用程序正确输出了 ENV['myvar']。

【问题讨论】:

  • config/deploy下面有myvar.rb吗
  • 该目录下没有只是production.rb。该文件将完成什么?

标签: ruby-on-rails rvm capistrano passenger centos7


【解决方案1】:

通常,您的设置应该可以工作。从版本 4 开始,独立的Passenger 应该继承shell 启动脚本中定义的所有变量。在与使用Passenger相关的各种场景中都有一个不错的documentation about environment variables。

我会检查或两件事:

  • 您的.bashrc 是从.profile 加载的。如果不是,那么您的变量将仅在交互式 shell 中加载,而不是在乘客中,这将解释您在尝试以 deployers 登录时所描述的行为。让我引用文档:

    确保您的~/.bashrc 实际包含在您的~/.profile 中,例如,如果您使用useradd 而不是adduser 创建用户,则情况可能并非如此。

  • 另外,请查看文档中的this section,并检查您是否遵守Passenger 实际将环境变量传递给应用程序的条件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-14
    相关资源
    最近更新 更多