使用.env文件在生产中设置SECRET_KEY_BASE

时间:2014-05-03 01:14:35

标签: ruby-on-rails ruby-on-rails-4 ruby-on-rails-4.1

我在生产中的根文件夹中有.env个文件。此文件定义SECRET_KEY_BASE中使用的config/secrets.yml。问题是我无法在.env之前加载config/secrets.yml文件。我尝试使用dotenv gem没有成功。

关于如何在生产中使用它的任何想法?

我不想在生产服务器上为我的webmaster用户全局设置它。只有应用程序才能访问SECRET_KEY_BASE值。

我使用的是rails 4.1。

3 个答案:

答案 0 :(得分:4)

我也使用dotenv gem。几乎在所有情况下它都适用于我。

这是dotenv gem的配置(是的,我将dotenv放在Gemfile中)。我只是创建了一个aaaaa.rb初始化文件。

config/initializers/aaaaaa.rb
#obscure name because rails load initializers/* files based on alphabets 
 require 'dotenv'
 Dotenv.load  

并且,它没有的情况,我最终在config/boot.rb文件

中这样做了
ENV["SECRET_KEY_BASE"] = "foobar"

答案 1 :(得分:2)

I was also having this problem. Here is how I got it to work. I followed documentation to initialize dotenv early:

# config/application.rb
Bundler.require(*Rails.groups)

Dotenv::Railtie.load

HOSTNAME = ENV['HOSTNAME']

But then I came across this error (issue #155):

gems/dotenv-rails-1.0.2/lib/dotenv/rails.rb:17:in `load': undefined method `join' for nil:NilClass (NoMethodError)

The workaround (also documented in issue #155) is to replace Dotenv::Railtie.load with:

Dotenv.load(File.expand_path("../../.env.#{Rails.env}", __FILE__))

Apparently this is only a problem when using rails 4.1.

答案 2 :(得分:-1)

也有这个问题,但设法通过在我的secrets.yml文件中使用它来实现它:

production:
  secret_key_base: ENV["SECRET_KEY_BASE"]

删除<%= %>

后,它有效