将Rails应用程序更改为生产

我怎样才能改变我的Rails应用程序在生产模式下运行? 有没有一个configuration文件,例如environment.rb来做到这一点?

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

通常情况下,你将能够进入你的Rails项目, rails s ,并在http://something.com:3000获得你的应用程序的开发版本。; 生产模式configuration有点麻烦。

我一直在搞这个,所以我想我会把这个写给新手(比如我自己)。 有一些小的调整是遍布整个互联网,并认为这可能会更容易。

  1. 关于服务器的核心设置(CentOS 6,请参考本指南,但它几乎适用于所有的Linux版本): https : //www.digitalocean.com/community/tutorials/how-to-setup-a-rails-4 -app与- apache的和-乘客上的centos -6-

  2. 确保在Passengerbuild立之后,你已经编辑了/etc/httpd/conf/httpd.conf文件来反映你的目录结构。 你想将DocumentRoot指向你的Rails项目/公共文件夹任何地方在httpd.conf文件中有这样的目录: /var/www/html/your_application/public需要被更新,否则一切都会变得非常沮丧。 我不能强调这一点。

  3. 重启服务器(或者Apache至less – service httpd restart

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

  5. RAILS_ENV=production rake secret – 这将创build一个secret_key,您可以添加到config/secrets.yml 。 你可以复制/粘贴到config / secrets.yml为了让事情运行,虽然我build议你不要这样做。 就我个人而言,我会做这一步,以确保其他一切正在工作,然后将其更改回来,以后再来源。

  6. RAILS_ENV=production rake db:migrate

  7. RAILS_ENV=production rake assets:precompile如果您正在提供静态资产,则进行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 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(公用文件夹内)中进行更改,并将模式设置为生产。