将 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" &gt;&gt; ~/.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=productionrails s

【讨论】:

【参考方案14】:
RAILS_ENV=production rails s

rails s -e production

默认环境是开发环境。

【讨论】:

【参考方案15】:

默认服务器运行在开发环境:$ rails s

如果您在生产环境中运行:$ rails s -e production$ RAILS_ENV=production rails s

【讨论】:

以上是关于将 Rails 应用程序更改为生产环境的主要内容,如果未能解决你的问题,请参考以下文章

laravel5 项目上线后务必将开发环境更改为生产环境

在 ASP.NET 应用程序的生产环境中将 x86 更改为 x64 dll

Rails 应用程序在生产环境中不提供 JS 和 SCSS 资产

Rails:在生产环境中配置记录器以使用 Papertrail

Rails生产方式的乘客

无法在生产环境中解析的路线(Rails 2.3.5)