将Rails应用程序更改为生产
我怎样才能改变我的Rails应用程序在生产模式下运行? 有没有一个configuration文件,例如environment.rb来做到这一点?
如何使用Apache和Phusion Passenger以生产模式(分步)设置和运行Rails 4应用程序:
通常情况下,你将能够进入你的Rails项目, rails s
,并在http://something.com:3000获得你的应用程序的开发版本。; 生产模式configuration有点麻烦。
我一直在搞这个,所以我想我会把这个写给新手(比如我自己)。 有一些小的调整是遍布整个互联网,并认为这可能会更容易。
-
关于服务器的核心设置(CentOS 6,请参考本指南,但它几乎适用于所有的Linux版本): https : //www.digitalocean.com/community/tutorials/how-to-setup-a-rails-4 -app与- apache的和-乘客上的centos -6-
-
确保在Passengerbuild立之后,你已经编辑了
/etc/httpd/conf/httpd.conf
文件来反映你的目录结构。 你想将DocumentRoot指向你的Rails项目/公共文件夹任何地方在httpd.conf
文件中有这样的目录:/var/www/html/your_application/public
需要被更新,否则一切都会变得非常沮丧。 我不能强调这一点。 -
重启服务器(或者Apache至less –
service httpd restart
) -
input您的Rails项目文件夹
/var/www/html/your_application
并使用rake db:migrate
开始rake db:migrate
。 确保数据库表存在,即使您计划稍后添加表(这也是步骤1的一部分)。 -
RAILS_ENV=production rake secret
– 这将创build一个secret_key,您可以添加到config/secrets.yml
。 你可以复制/粘贴到config / secrets.yml为了让事情运行,虽然我build议你不要这样做。 就我个人而言,我会做这一步,以确保其他一切正在工作,然后将其更改回来,以后再来源。 -
RAILS_ENV=production rake db:migrate
-
RAILS_ENV=production rake assets:precompile
如果您正在提供静态资产,则进行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+项目。
如果你在Passenger上运行,那么默认是运行在生产环境中,在你的apache conf中:
<VirtualHost *:80> ServerName application_name.rails.local DocumentRoot "/Users/rails/application_name/public" RailsEnv production ## This is the default </VirtualHost>
如果你只是运行一个本地服务器与杂种或webrick,你可以这样做:
./script/server -e production
或在bash中:
RAILS_ENV=production ./script/server
实际上覆盖enviornment.rb中的RAILS_ENV常量应该是你的最后一招,因为它可能不会保持设置(请参阅我给出的另一个答案 )
如果mipadi的build议不起作用,请将其添加到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'
将环境variablesRAILS_ENV
更改为production
。
您也可以将环境传递给脚本/服务器:
$ script/server -e production
$> export RAILS_ENV=production
rails s -e production
这将运行与RAILS_ENV
= 'production'
的服务器。
除此之外,您必须在production.rb
设置资产path
config.serve_static_assets = true
没有这个你的资产将不会被加载。
正如其他人所发布的: rails server -e production
或者,我的个人爱好: RAILS_ENV=production
rails s
在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的生产环境的最好的文章是生产环境 – Rails 3
RAILS_ENV=production rails s
要么
rails s -e production
默认环境是发展。
对于默认服务器:rails s -e生产
对于服务器端口:rails s -p [port] -e production,例如。 导轨s -p 3002 -e生产
请确保你已经在你的environment.rb文件中完成了。
ENV ['RAILS_ENV'] || ='生产'
如果您的应用程序在共享主机环境或坐席乘客中运行,则可能需要在.httaccess(公用文件夹内)中进行更改,并将模式设置为生产。