如何更改我的 Rails 应用程序以在生产模式下运行?是否有一个配置文件,例如 environment.rb 来做到这一点?
15 回答
这将是
rails server -e production
或者,更紧凑
rails s -e production
它适用于 rails 3+ 项目。
如何使用 Apache 和 Phusion Passenger 在生产模式下(逐步)设置和运行 Rails 4 应用程序:
通常,您可以进入您的 Rails 项目,并在http://something.com:3000rails s
获得应用程序的开发版本。生产模式的配置有点棘手。
我已经搞砸了一段时间,所以我想我会为新手(比如我自己)写这个。有一些小调整遍布整个互联网,并认为这可能会更容易。
有关服务器的核心设置,请参阅本指南(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 项目 /public 文件夹httpd.conf
文件中具有此类目录的任何位置:/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_keyconfig/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
我可能错过了一些令人发指的事情,但这在过去对我有用。
如果你在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
或在 bash 中:
RAILS_ENV=production ./script/server
实际上覆盖 enviornment.rb 中的 RAILS_ENV 常量应该是你最后的手段,因为它可能不会保持不变(请参阅我给出的另一个答案)
如果mipadi 的建议不起作用,请将其添加到 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'
将环境变量更改RAILS_ENV
为production
.
$> export RAILS_ENV=production
您还可以将环境传递给脚本/服务器:
$ script/server -e production
rails s -e production
这将使用RAILS_ENV
=运行服务器'production'
。
除此之外,您必须在其中设置资产路径production.rb
config.serve_static_assets = true
没有这个,您的资产将不会被加载。
RAILS_ENV=production rails s
或者
rails s -e production
默认环境是开发环境。
正如其他人发布的那样:rails server -e production
或者,我个人的最爱: RAILS_ENV=production
rails s
通过“rails server -e production”在生产环境中运行rails server并不是一个好方法,因为rails作为一个单线程应用程序运行,一次只能响应一个HTTP请求。
关于 Rails 生产环境的最佳文章是Production Environments - Rails 3
在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 s -e production
对于 costum 服务器端口:rails s -p [port] -e 生产,例如。rails s -p 3002 -e 生产
默认情况下,服务器在开发环境中运行:$ rails s
如果您在生产环境中运行:$ rails s -e production
或$ RAILS_ENV=production rails s
请确保您已在 environment.rb 文件中完成以下操作。
ENV['RAILS_ENV'] ||= '生产'
如果您的应用程序在共享托管环境或 phushion 乘客中运行,您可能需要在 .httaccess(在公共文件夹内)中进行更改并将模式设置为生产。