194

如何更改我的 Rails 应用程序以在生产模式下运行?是否有一个配置文件,例如 environment.rb 来做到这一点?

4

15 回答 15

352

这将是

rails server -e production

或者,更紧凑

rails s -e production

它适用于 rails 3+ 项目。

于 2010-10-08T21:36:42.987 回答
75

如何使用 Apache 和 Phusion Passenger 在生产模式下(逐步)设置和运行 Rails 4 应用程序:

通常,您可以进入您的 Rails 项目,并在http://something.com:3000rails s获得应用程序的开发版本。生产模式的配置有点棘手。

我已经搞砸了一段时间,所以我想我会为新手(比如我自己)写这个。有一些小调整遍布整个互联网,并认为这可能会更容易。

  1. 有关服务器的核心设置,请参阅本指南(CentOS 6,但它应该适用于几乎所有 Linux 版本):https ://www.digitalocean.com/community/tutorials/how-to-setup-a-rails-4 -app-with-apache-and-passenger-on-centos-6

  2. 绝对确定在设置Passenger 之后您已经编辑了/etc/httpd/conf/httpd.conf文件以反映您的目录结构。您想将 DocumentRoot 指向您的 Rails 项目 /public 文件夹httpd.conf文件中具有此类目录的任何位置:/var/www/html/your_application/public需要更新,否则一切都会变得非常令人沮丧。我不能强调这一点。

  3. 重新启动服务器(或至少 Apache - service httpd restart

  4. 输入您的 Rails 项目文件夹/var/www/html/your_application并使用rake db:migrate. 确保数据库表存在,即使您计划稍后添加表(这也是步骤 1 的一部分)。

  5. RAILS_ENV=production rake secret- 这将创建一个您可以添加到的 secret_key config/secrets.yml。您可以将其复制/粘贴到 config/secrets.yml 以使事情运行,尽管我建议您不要这样做。就个人而言,我执行此步骤是为了确保其他一切正常,然后将其更改回来并稍后获取它。

  6. RAILS_ENV=production rake db:migrate

  7. RAILS_ENV=production rake assets:precompile如果您正在提供静态资产。这会将 js、css、图像文件推送到/public文件夹中。

  8. RAILS_ENV=production rails s

此时,您的应用程序应该可以在http://something.com/whatever而不是:3000. 如果没有,passenger-memory-stats看看是否有类似的条目908 469.7 MB 90.9 MB Passenger RackApp: /var/www/html/projectname

我可能错过了一些令人发指的事情,但这在过去对我有用。

于 2014-12-11T23:47:55.050 回答
62

如果你在Passenger上运行,那么默认是在生产中运行,在你的 apache conf 中:

<VirtualHost *:80>
  ServerName application_name.rails.local
  DocumentRoot "/Users/rails/application_name/public"
  RailsEnv production ## This is the default
</VirtualHost>

如果你只是用 mongrel 或 webrick 运行本地服务器,你可以这样做:

./script/server -e production

或在 bash 中:

RAILS_ENV=production ./script/server

实际上覆盖 enviornment.rb 中的 RAILS_ENV 常量应该是你最后的手段,因为它可能不会保持不变(请参阅我给出的另一个答案)

于 2009-12-23T02:25:50.263 回答
54

如果mipadi 的建议不起作用,请将其添加到 config/environment.rb

# force Rails into production mode when                          
# you don't control web/app server and can't set it the proper way                  
ENV['RAILS_ENV'] ||= 'production'
于 2009-12-22T21:25:01.950 回答
19

将环境变量更改RAILS_ENVproduction.

于 2009-12-22T21:22:57.130 回答
19
$> export RAILS_ENV=production
于 2013-04-10T11:16:37.253 回答
18

您还可以将环境传递给脚本/服务器:

$ script/server -e production
于 2009-12-22T22:35:41.210 回答
12
rails s -e production

这将使用RAILS_ENV=运行服务器'production'

除此之外,您必须在其中设置资产路径production.rb

config.serve_static_assets = true

没有这个,您的资产将不会被加载。

于 2015-07-29T14:38:18.213 回答
8
RAILS_ENV=production rails s

或者

rails s -e production

默认环境是开发环境。

于 2017-01-11T07:08:08.213 回答
5

正如其他人发布的那样:rails server -e production

或者,我个人的最爱: RAILS_ENV=production rails s

于 2015-10-08T17:15:46.610 回答
2

通过“rails server -e production”在生产环境中运行rails server并不是一个好方法,因为rails作为一个单线程应用程序运行,一次只能响应一个HTTP请求。

关于 Rails 生产环境的最佳文章是Production Environments - Rails 3

于 2012-10-22T17:31:54.723 回答
2

Rails 3中

添加Rails.env = ActiveSupport::StringInquirer.new('production')到 application.rb 并且rails s将与rails server -e production

module BlacklistAdmin
  class Application < Rails::Application

    config.encoding = "utf-8"
    Rails.env = ActiveSupport::StringInquirer.new('production')

    config.filter_parameters += [:password]
  end
end
于 2011-07-05T13:39:18.233 回答
1

默认服务器:rails s -e production

对于 costum 服务器端口:rails s -p [port] -e 生产,例如。rails s -p 3002 -e 生产

于 2014-08-13T04:50:18.463 回答
1

默认情况下,服务器在开发环境中运行:$ rails s

如果您在生产环境中运行:$ rails s -e production$ RAILS_ENV=production rails s

于 2018-04-30T11:12:12.600 回答
0

请确保您已在 environment.rb 文件中完成以下操作。

ENV['RAILS_ENV'] ||= '生产'

如果您的应用程序在共享托管环境或 phushion 乘客中运行,您可能需要在 .httaccess(在公共文件夹内)中进行更改并将模式设置为生产。

于 2014-07-29T08:16:44.923 回答