如何将我的Rails应用程序更改为在生产模式下运行?是否有一个配置文件,例如environment.rb,来执行此操作?
将环境变量RAILS_ENV更改为production。
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相同
Rails.env = ActiveSupport::StringInquirer.new('production')
rails s
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获取应用程序的开发版本。生产模式的配置有点复杂。
我已经折腾了一段时间了,所以我想我应该为新手(比如我自己)写这篇文章。有一些小的调整,这是在整个互联网上传播,并认为这可能更容易。
有关服务器的核心设置,请参阅本指南(CentOS 6,但它应该适用于几乎所有Linux版本):https://www.digitalocean.com/community/tutorials/how-to-setup-a-rails-4-app-with-apache-and-passenger-on-centos-6
请务必在设置Passenger后编辑/etc/httpd/conf/httpd.conf文件,以反映您的目录结构。您希望将DocumentRoot指向您的Rails项目/公共文件夹httpd.conf文件中的任何位置,该文件具有以下目录:/var/www/html/your_application/public需要更新,否则一切都将变得非常令人沮丧。这一点我怎么强调都不为过。
/etc/httpd/conf/httpd.conf
httpd.conf
/var/www/html/your_application/public
重新启动服务器(或至少重新启动Apache-service httpd restart)
service httpd restart
输入您的Rails项目文件夹/var/www/html/your_application,并使用rake db:migrate启动迁移。确保数据库表存在,即使您计划稍后添加表(这也是步骤1的一部分)。
/var/www/html/your_application
rake db:migrate
RAILS_ENV=production rake secret-这将创建一个_密钥,您可以将其添加到config/secrets.yml。您可以将其复制/粘贴到config/secrets.yml中,以便运行,但我建议您不要这样做。就我个人而言,我做这一步是为了确保其他一切都正常工作,然后把它改回来,以后再找它。
RAILS_ENV=production rake secret
config/secrets.yml
RAILS_ENV=production rake db:migrate
如果提供静态资产,则RAILS_ENV=production rake assets:precompile。这将把JS、CSS、图像文件推送到/public文件夹中。
RAILS_ENV=production rake assets:precompile
/public
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的条目
http://something.com/whatever
:3000
passenger-memory-stats
908 469.7 MB 90.9 MB Passenger RackApp: /var/www/html/projectname
我可能错过了一些令人发指的事情,但这在过去对我很有效。
这将以RAILS_ENV='production'运行服务器。
'production'
除此之外,您必须在production.rb中设置资产路径
production.rb
config.serve_static_assets = true
否则,您的资产将无法加载。
正如其他人所说:rails server -e production
或者,我个人的最爱:RAILS_ENV=productionrails s
RAILS_ENV=production
或者
默认情况下,环境是开发环境。
默认情况下,服务器在开发环境上运行:$ rails s
$ rails s
如果在生产环境中运行:$ rails s -e production或$ RAILS_ENV=production rails s
$ rails s -e production
$ RAILS_ENV=production rails s