将Rails应用程序更改为生产

如何将我的Rails应用程序更改为在生产模式下运行?是否有一个配置文件,例如environment.rb,来执行此操作?

207523 次浏览

将环境变量RAILS_ENV更改为production

如果米帕迪的建议不起作用,请将其添加到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'

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

$ script/server -e production

如果您正在乘客上运行,则默认情况下将在生产中运行,在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常量应该是您最后的选择,因为它可能不会保持设置(请参阅我给出的另一个答案)。

现在这将是

rails server -e production

或者,更紧凑

rails s -e production

它适用于Rails3+项目。

铁轨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

通过“ Rails Server-e Production ”在生产环境中运行Rails Server并不是一种好方法,因为这样Rails将作为单线程应用程序运行,并且一次只能响应一个HTTP请求。

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

$> export RAILS_ENV=production

请确保您已在environment.rb文件中执行了以下操作。

env[' Rails_环境']||='生产'

如果应用程序在共享主机环境或Phushion Passenger中运行,则可能需要在.httaccess(在公共文件夹内)中进行更改,并将模式设置为生产。

对于默认服务器:rails s-e Production

对于客户服务器端口:rails s-p[端口]-e生产,例如钢轨S-P 3002-E生产

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

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

我已经折腾了一段时间了,所以我想我应该为新手(比如我自己)写这篇文章。有一些小的调整,这是在整个互联网上传播,并认为这可能更容易。

  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项目/公共文件夹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-这将创建一个_密钥,您可以将其添加到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的条目

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

rails s -e production

这将以RAILS_ENV='production'运行服务器。

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

config.serve_static_assets = true

否则,您的资产将无法加载。

正如其他人所说:rails server -e production

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

RAILS_ENV=production rails s

或者

rails s -e production

默认情况下,环境是开发环境。

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

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