如何更改Rails应用程序使其在生产模式下运行?是否有一个配置文件(例如,environment.rb)来做到这一点?
如何更改Rails应用程序使其在生产模式下运行?是否有一个配置文件(例如,environment.rb)来做到这一点?
Answers:
如何使用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在centos-6上使用apache和passenger的应用程序
绝对确定在设置了Passenger后,您已经编辑了/etc/httpd/conf/httpd.conf
文件以反映您的目录结构。您想将DocumentRoot指向Rails项目/ public文件夹,在httpd.conf
具有这种dir的文件中的任何位置:/var/www/html/your_application/public
需要更新,否则一切都会变得很沮丧。我不能太强调这一点。
重新启动服务器(或至少重启Apache- service httpd restart
)
输入您的Rails项目文件夹,/var/www/html/your_application
然后从开始迁移rake db:migrate
。确保数据库表存在,即使您计划稍后添加表(这也是步骤1的一部分)。
RAILS_ENV=production rake secret
-这将创建一个secret_key,您可以将其添加到中config/secrets.yml
。您可以将其复制/粘贴到config / secrets.yml中,以使程序运行,尽管我建议您不要这样做。就个人而言,我执行此步骤以确保其他所有功能均正常运行,然后将其更改回并稍后再提供。
RAILS_ENV=production rake db:migrate
RAILS_ENV=production rake assets:precompile
如果您要投放静态资产。这会将js,css,图像文件推送到该/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
我可能错过了一些令人发指的事情,但这在过去对我有用。
现在是
rails server -e production
或者,更紧凑
rails s -e production
它适用于Rails 3+项目。
rails s -e production
server -e production
在它们上运行?
production
始终都是默认选项。
echo "export RAILS_ENV=production" >> ~/.bash_profile
如果您在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
或以重击:
RAILS_ENV=production ./script/server
实际上在enviornment.rb中重写RAILS_ENV常量应该是您的最后选择,因为它可能不会保持不变(请参阅我对此给出的另一个答案)
将环境变量更改RAILS_ENV
为production
。
~/.bashrc
或~/.bash_profile
或简单地export RAILS_ENV=production"
rails s -e production
这将使用RAILS_ENV
= 运行服务器'production'
。
除此之外,您还必须在 production.rb
config.serve_static_assets = true
否则,您的资产将无法加载。
在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
这不是通过“ rails server -e production”在生产环境中运行Rails Server的好方法,因为Rails随后作为单线程应用程序运行,并且一次只能响应一个HTTP请求。
关于Rails的生产环境的最佳文章是Production Environments-Rails 3
默认情况下,服务器在开发环境上运行: $ rails s
如果您在生产环境上运行:$ rails s -e production
或$ RAILS_ENV=production rails s