在Heroku上使用生产中的ENV文件

时间:2014-02-09 18:16:13

标签: ruby-on-rails heroku

我在 production.rb 环境文件中有以下配置行,如this article中所述:

  config.cache_store = :mem_cache_store, ENV["MEMCACHEDCLOUD_SERVERS"].split(','), { :username => ENV["MEMCACHEDCLOUD_USERNAME"], :password => ENV["MEMCACHEDCLOUD_PASSWORD"] }

但是当我尝试部署时,我会收到错误:

  

正在运行:rake assets:precompile rake aborted!
  '

中未定义的方法split' for nil:NilClass
/tmp/build_abdc.../config/environments/production.rb:107:in
阻止

这是因为编译期间配置变量不可用。有一个Heroku实验室add-on你可以用它来解决这个问题,但它附带了Heroku的警告,“使用这个实验室功能被认为是与Heroku最佳实践相反的。”

那么,在生产配置中使用ENV vars时,最佳实践是什么?它们是否应该全部包含在救援处理程序中,以便Heroku在编译时忽略它们?

1 个答案:

答案 0 :(得分:1)

我们最终只是在分配之前检查ENV var。看起来这是你在Heroku上的config / initializers中使用ENV vars所需的模式:

  # NOTE: ENV vars aren't available during slug compilation, so we must check if they exist:
  if ENV["MEMCACHEDCLOUD_SERVERS"]
    config.cache_store = :mem_cache_store, ENV["MEMCACHEDCLOUD_SERVERS"].split(','), { :username => ENV["MEMCACHEDCLOUD_USERNAME"], :password => ENV["MEMCACHEDCLOUD_PASSWORD"] }
  end

另见: https://devcenter.heroku.com/articles/rails-asset-pipeline#failures-in-the-assets-precompile-task