【问题标题】:Change a Rails application to production将 Rails 应用程序更改为生产环境
【发布时间】:2010-12-29 06:51:16
【问题描述】:

如何更改我的 Rails 应用程序以在生产模式下运行?是否有一个配置文件,例如 environment.rb,可以做到这一点?

【问题讨论】:

  • 似乎第二个答案有更多的选票,除非您有任何问题,否则您是否愿意对此进行快速审查并接受第二个答案。只会帮助未来的访客。谢谢 :)

标签: ruby-on-rails development-environment production-environment


【解决方案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
      • 非常受欢迎的答案,这个答案应该出现在 StackOverflow 文档中。
      【解决方案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 获取您的应用程序的开发版本。生产模式的配置有点棘手。

              我已经搞砸了一段时间,所以我想我会为新手(比如我自己)写这个。有一些小调整遍布整个互联网,并认为这可能会更容易。

              1. 请参阅本指南了解服务器的核心设置(CentOS 6,但它应该适用于几乎所有 Linux 版本):https://www.digitalocean.com/community/tutorials/how-to-setup-a-rails-4-app-with-apache-and-passenger-on-centos-6

              2. 确保在设置Passenger 后您已编辑/etc/httpd/conf/httpd.conf 文件以反映您的目录结构。 你想将 DocumentRoot 指向你的 Rails 项目 /public 文件夹httpd.conf 文件中的任何地方,如果有这种目录:/var/www/html/your_application/public 需要更新,否则一切都会变得非常令人沮丧。这一点我怎么强调都不过分。

              3. 重新启动服务器(或至少 Apache - service httpd restart

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

              5. RAILS_ENV=production rake secret - 这将创建一个您可以添加到 config/secrets.yml 的 secret_key。您可以将其复制/粘贴到 config/secrets.yml 中以便让事情正常运行,尽管我建议您不要这样做。就个人而言,我执行此步骤是为了确保其他一切正常,然后将其更改回来并稍后获取它。

              6. RAILS_ENV=production rake db:migrate

              7. 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 的条目

              我可能错过了一些令人发指的事情,但这在过去对我有用。

              【讨论】:

              • 我觉得这个答案应该迁移到 stackoverflow 文档中。
              • 我要补充一点,如果您不想使用像 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

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 2013-03-06
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2013-07-28
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多