ruby-on-rails - 更改 RACK_ENV 和 RAILS_ENV 有什么作用?

标签 ruby-on-rails heroku staging

我已将我的应用程序部署到 Heroku 并 fork 环境以创建“暂存”环境。我复制了我的 paroduction.rb 文件来创建一个 staging.rb,但是当我将 RAILS_ENV 和 RACK_ENV 变量从生产更改为暂存时,没有返回任何 Assets 并且日志显示以下类型错误:

2014-05-05T07:42:33.614170+00:00 app[web.1]: F, [2014-05-05T07:42:33.610206 #2] FATAL -- :
2014-05-05T07:42:33.614172+00:00 app[web.1]: ActionController::RoutingError (No route matches [GET] "/assets/application-835271b3bd7cf8b176e8b30d9ca395fd.js"):
2014-05-05T07:42:33.614173+00:00 app[web.1]:   vendor/bundle/ruby/2.0.0/gems/actionpack-4.0.4/lib/action_dispatch/middleware/debug_exceptions.rb:21:in `call'
2014-05-05T07:42:33.614174+00:00 app[web.1]:   vendor/bundle/ruby/2.0.0/gems/actionpack-4.0.4/lib/action_dispatch/middleware/show_exceptions.rb:30:in `call'
2014-05-05T07:42:33.614176+00:00 app[web.1]:   vendor/bundle/ruby/2.0.0/gems/railties-4.0.4/lib/rails/rack/logger.rb:38:in `call_app'
2014-05-05T07:42:33.614177+00:00 app[web.1]:   vendor/bundle/ruby/2.0.0/gems/railties-4.0.4/lib/rails/rack/logger.rb:20:in `block in call'
2014-05-05T07:42:33.614178+00:00 app[web.1]:   vendor/bundle/ruby/2.0.0/gems/activesupport-4.0.4/lib/active_support/tagged_logging.rb:68:in `block in tagged'
2014-05-05T07:42:33.614200+00:00 app[web.1]:   vendor/bundle/ruby/2.0.0/gems/activesupport-4.0.4/lib/active_support/tagged_logging.rb:26:in `tagged'
2014-05-05T07:42:33.614202+00:00 app[web.1]:   vendor/bundle/ruby/2.0.0/gems/activesupport-4.0.4/lib/active_support/tagged_logging.rb:68:in `tagged'
2014-05-05T07:42:33.614203+00:00 app[web.1]:   vendor/bundle/ruby/2.0.0/gems/railties-4.0.4/lib/rails/rack/logger.rb:20:in `call'
2014-05-05T07:42:33.614204+00:00 app[web.1]:   vendor/bundle/ruby/2.0.0/gems/actionpack-4.0.4/lib/action_dispatch/middleware/request_id.rb:21:in `call'
2014-05-05T07:42:33.614206+00:00 app[web.1]:   vendor/bundle/ruby/2.0.0/gems/rack-1.5.2/lib/rack/methodoverride.rb:21:in `call'
2014-05-05T07:42:33.614207+00:00 app[web.1]:   vendor/bundle/ruby/2.0.0/gems/rack-1.5.2/lib/rack/runtime.rb:17:in `call'
2014-05-05T07:42:33.614218+00:00 app[web.1]:   vendor/bundle/ruby/2.0.0/gems/activesupport-4.0.4/lib/active_support/cache/strategy/local_cache.rb:83:in `call'
2014-05-05T07:42:33.614219+00:00 app[web.1]:   vendor/bundle/ruby/2.0.0/gems/rack-1.5.2/lib/rack/sendfile.rb:112:in `call'
2014-05-05T07:42:33.614221+00:00 app[web.1]:   vendor/bundle/ruby/2.0.0/gems/railties-4.0.4/lib/rails/engine.rb:511:in `call'
2014-05-05T07:42:33.614222+00:00 app[web.1]:   vendor/bundle/ruby/2.0.0/gems/railties-4.0.4/lib/rails/application.rb:97:in `call'
2014-05-05T07:42:33.614224+00:00 app[web.1]:   vendor/bundle/ruby/2.0.0/gems/rack-1.5.2/lib/rack/lock.rb:17:in `call'
2014-05-05T07:42:33.614225+00:00 app[web.1]:   vendor/bundle/ruby/2.0.0/gems/rack-1.5.2/lib/rack/content_length.rb:14:in `call'
2014-05-05T07:42:33.614226+00:00 app[web.1]:   vendor/bundle/ruby/2.0.0/gems/rack-1.5.2/lib/rack/handler/webrick.rb:60:in `service'
2014-05-05T07:42:33.614228+00:00 app[web.1]:   vendor/ruby-2.0.0/lib/ruby/2.0.0/webrick/httpserver.rb:138:in `service'
2014-05-05T07:42:33.614229+00:00 app[web.1]:   vendor/ruby-2.0.0/lib/ruby/2.0.0/webrick/httpserver.rb:94:in `run'
2014-05-05T07:42:33.614231+00:00 app[web.1]:   vendor/ruby-2.0.0/lib/ruby/2.0.0/webrick/server.rb:295:in `block in start_thread'

我在 Stackoverflow 上找到了其他帖子,例如:ActionController::RoutingError (No route matches [GET] "/assets/images/control_top.png"): in rails 3.2.8

确实将 config.serve_static_assets = false 更改为 true 解决了问题,但我不愿意仅在暂存环境中执行此操作,我知道这会影响生产环境中的性能。

我真正不明白的是为什么会出现此错误,据我所知唯一的区别是环境变量名称已更改。所以对于我的问题:

更改这些环境变量实际上会对应用程序产生什么影响?为什么它在我的应用程序中有这种效果?

作为奖励,如果有更好的方法来解决我所描述的对生产配置进行暂存镜像的潜在问题,我将不胜感激。

最佳答案

进一步调查表明,环境变量的设置在部署中具有以下影响:

  1. 特定于环境的配置文件(例如config/environments/production.rb)
  2. 安装 Gemfile 组中定义的 gem(例如 group :production)

在这种情况下,heroku 需要 gem 'rails_12factor' 才能提供静态 Assets 。因此,除了 group :production 之外,:staging 还需要这个 gem。

关于ruby-on-rails - 更改 RACK_ENV 和 RAILS_ENV 有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23468756/

相关文章:

staging - 我可以阻止搜索引擎索引我网站上的整个目录吗?

ruby-on-rails - 将数组分隔为带引号的逗号分隔字符串

sql - 请帮我纠正这个 Rails/ruby 方法吗?

ruby-on-rails - 格式化 Authlogic "last_login_at"字符串

ruby-on-rails - 无法按日期找到记录 [Rails 4]

ruby-on-rails - 由于新的Relic RPM gem,Heroku推送失败

heroku - 处理托管在 Heroku 上的 Clojure 分类 Web 应用程序的子域

bash - 当我在 Heroku 上登录生产远程时,如何更改 Terminal.App 的颜色?

ruby-on-rails - 密码保护 Rails 登台环境

firebase - Firebase Web 应用程序上的不同环境