【问题标题】:How to force Rails 4 app into production mode in Nginx and Unicorn?如何在 Nginx 和 Unicorn 中强制 Rails 4 应用程序进入生产模式?
【发布时间】:2014-06-14 02:17:49
【问题描述】:

我正在使用 Ubuntu、NginX 和 Unicorn 的 VPS 上运行 Rails 4 应用程序。

当我 SSL 进入我的服务器并通过 git 更新应用程序或在数据库上运行 rake 任务时,我的应用程序总是切换到 development 模式,我无法让它进入 production 模式。

输入RAILS_ENV=production 似乎完全没有效果。

当我这样做时

$ rails console
$ Rails.env

我明白了

--> 开发

一直都是。

我必须怎么做才能强制 NginX 进入production 模式?

实际上,我不希望 Nginx永远development 模式下运行。

如何做到这一点?

感谢您的帮助。

【问题讨论】:

  • 您的 ROR 应用程序是如何开始使用的?乘客?独角兽? ENV vars 有效,但答案取决于您如何调用 Rails。

标签: ruby-on-rails nginx unicorn


【解决方案1】:

默认情况下,您的应用程序可能在生产模式下运行。你正在做的是使用一个 shell,一个使用不同环境的东西。

通常在生产服务器上,您会将其放入配置文件脚本中:

# Add to ~/.bash_profile
export RAILS_ENV=production

这样,当您启动rails c 时,您将获得正确的环境。

请注意,这个 shell 首先参与的唯一方法是您的 config/database.yml 中有一个 development 设置。那不应该存在,因为您的生产服务器的配置应该是仅生产的。

【讨论】:

    【解决方案2】:

    nginx 不会在开发或生产模式下运行 - 您的应用会在您启动 unicorn 实例时通过您的 unicorn 配置和/或 RAILS_ENV 环境变量运行。

    您应该使用命令前缀的RAILS_ENV 变量来启动您的独角兽实例,例如:

    RAILS_ENV=production bundle exec unicorn -c config/unicorn.rb -D
    

    rails console 启动一个完全不同的实例,它可能在不同的环境中——它与你的独角兽实例无关。如果要启动生产控制台实例,请调用 RAILS_ENV=production rails consolerails console production。请注意,这与您的应用程序运行的环境无关。

    【讨论】:

    • 您本身不需要环境变量,但您需要指定 Rails/Rack 环境。 Unicorn 与最新的 Rack 兼容服务器一样,接受环境参数(-E--env)。
    • 没错,但无论您如何启动应用程序,使用环境变量都会始终如一地工作。
    猜你喜欢
    • 2015-01-18
    • 1970-01-01
    • 1970-01-01
    • 2017-07-17
    • 1970-01-01
    • 2020-07-19
    • 2013-08-10
    • 2018-10-11
    相关资源
    最近更新 更多