将 Rails 应用程序更改为生产环境
Posted
技术标签:
【中文标题】将 Rails 应用程序更改为生产环境【英文标题】:Change a Rails application to production 【发布时间】:2010-12-29 06:51:16 【问题描述】:如何更改我的 Rails 应用程序以在生产模式下运行?是否有一个配置文件,例如 environment.rb,可以做到这一点?
【问题讨论】:
似乎第二个答案有更多的选票,除非您有任何问题,否则您是否愿意对此进行快速审查并接受第二个答案。只会帮助未来的访客。谢谢 :) 【参考方案1】:将环境变量RAILS_ENV
改为production
。
【讨论】:
环境变量在哪里? 可能位于~/.bashrc
或~/.bash_profile
或只是export RAILS_ENV=production"
【参考方案2】:
如果mipadi's suggestion 不起作用,请将其添加到 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'
【讨论】:
像 Heroku 这样的云服务呢?ENV['RAILS_ENV'] ||= 'production'
也可以应用在他们身上吗?
我很久以前编辑过这个文件并忘记了..谢谢提醒..节省了很多时间【参考方案3】:
您也可以将环境传递给脚本/服务器:
$ script/server -e production
【讨论】:
【参考方案4】:如果您在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 常量可能是你最后的手段,因为它可能不会保持不变(请参阅 another answer 我已经放弃了)
【讨论】:
【参考方案5】:现在应该是
rails server -e production
或者,更紧凑
rails s -e production
它适用于 rails 3+ 项目。
【讨论】:
或短版rails s -e production
像 Heroku 这样的云服务呢?如何在它们上运行server -e production
?
云服务通常有指定环境的选项,但其中production
总是默认的。
echo "export RAILS_ENV=production" >> ~/.bash_profile
非常受欢迎的答案,这个答案应该出现在 *** 文档中。【参考方案6】:
在 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
【讨论】:
【参考方案7】:通过“rails server -e production”在生产环境中运行rails server并不是一个好方法,因为rails作为一个单线程应用程序运行,一次只能响应一个HTTP请求。
rails生产环境最好的文章是Production Environments - Rails 3
【讨论】:
Link rot... 可在 Wayback 机器上使用:link【参考方案8】:$> export RAILS_ENV=production
【讨论】:
【参考方案9】:请确保您已在 environment.rb 文件中完成以下操作。
ENV['RAILS_ENV'] ||= '生产'
如果您的应用程序在共享托管环境或 phushion 乘客中运行,您可能需要更改 .httaccess(在公共文件夹内)并将模式设置为生产。
【讨论】:
【参考方案10】:默认服务器:rails s -e production
对于costum服务器端口:rails s -p [port] -e production,例如。 rails s -p 3002 -e 生产
【讨论】:
【参考方案11】:如何使用 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 项目 /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
- 这将创建一个您可以添加到 config/secrets.yml
的 secret_key。您可以将其复制/粘贴到 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
的条目
我可能错过了一些令人发指的事情,但这在过去对我有用。
【讨论】:
我觉得这个答案应该迁移到 *** 文档中。 我要补充一点,如果您不想使用像 apache 这样的 Web 内容交付,您可以在 RAILS_ENV=production 旁边添加一个 RAILS_SERVE_STATIC_FILES=1,这意味着 Rails 将为每个文件提供服务所以不建议将其用于实际生产状态...【参考方案12】:rails s -e production
这将使用RAILS_ENV
= 'production'
运行服务器。
除此之外,您必须在production.rb
中设置资产路径
config.serve_static_assets = true
没有这个,你的资源将不会被加载。
【讨论】:
抱歉...本应投反对票。稍作修改以更正错误并点赞。【参考方案13】:正如其他人发布的那样:rails server -e production
或者,我个人的最爱:RAILS_ENV=production
rails s
【讨论】:
【参考方案14】:RAILS_ENV=production rails s
或
rails s -e production
默认环境是开发环境。
【讨论】:
【参考方案15】:默认服务器运行在开发环境:$ rails s
如果您在生产环境中运行:$ rails s -e production
或 $ RAILS_ENV=production rails s
【讨论】:
以上是关于将 Rails 应用程序更改为生产环境的主要内容,如果未能解决你的问题,请参考以下文章
在 ASP.NET 应用程序的生产环境中将 x86 更改为 x64 dll
Rails 应用程序在生产环境中不提供 JS 和 SCSS 资产