Rails 4 - 无法在生产中获得ENV变量

时间:2015-02-23 16:09:33

标签: ruby-on-rails-4 environment-variables

我试图让我的ENV变量处于生产模式...... 但现在..无法到达服务器...找不到SECRET_KEY_BASE ...如果我对它进行硬编码,那么就麻烦了数据库信誉,如果我对它们进行硬编码,就会对SMTP信誉造成麻烦...

这意味着无法达到ENV []变量......

我添加了gemfile以获取它:生产环境,并捆绑它

gem 'dotenv-rails', :groups => [:development, :test, :staging, :production]

我的.env文件存在于我的远程服务器中(Ubuntu 14 - w .rbenv Ruby 2.0,Rais 4.2)

cat /var/www/workshop/shared/.env
   SECRET_KEY_BASE=106063d5146566142b6aa4782b874115c73a61ac2505f11f8e
   DATABASE_USER_NAME=myself
   DATABASE_PASSWORD=mydbpwd
   MAILGUN_SMTP_SERVER=smtp.mailgun.org
   MAILGUN_SMTP_USER_NAME=postmaster@mydomain.com
   MAILGUN_SMTP_PASSWORD=2fc998a7399999999a264b88c
   MAILGUN_SMTP_DOMAIN=mydomain.com

我在远程服务器上设置了secrets.yml文件

cat secrets.yml
  production:
     secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>

我设置了我的database.yml

cat database.yml
    production:
     adapter: postgresql
     database: workshop
     encoding: unicode
     pool: 5
     username: <%= ENV['DATABASE_USER_NAME'] %>
     password: <%= ENV['DATABASE_PASSWORD'] %>

我更新了我的config / environments / production.rb w smtp creds

cat production.rb
        .....
        # SMTP settings for mailgun
          config.action_mailer.smtp_settings = {
            :port           => 587,
            :address        => ENV['MAILGUN_SMTP_SERVER'],
            :user_name      => ENV['MAILGUN_SMTP_USER_NAME'],
            :password       => ENV['MAILGUN_SMTP_PASSWORD'],
            :domain         => ENV['MAILGUN_SMTP_DOMAIN'],
            :authentication => :plain,
            :enable_starttls_auto => true
          }
          ...

1 个答案:

答案 0 :(得分:0)

最后我在生产中放弃了w .dotenv ...... 我解决了使用Rails 4.1 secrets.yml ...

因为我正在部署w capistrano 3,

- I use the gem capistrano-upload-config
- I created : secrets.production.yml , database.production.yml, configuration.production.yml
- I added in my capistrano deploy.rb
    set :config_files, %w{config/database.yml config/secrets.yml config/application.yml}
    set :linked_files, %w{config/database.yml config/secrets.yml config/application.yml}

capistrano从本地.production文件上传这些制作文件并将它们链接起来......所以

服务器database.yml被加载/链接(来自本地database.production.yml)

服务器secrets.yml被加载/链接(来自local secrets.production.yml)

服务器application.yml被加载/链接(来自本地application.production.yml)

关于production.rb SMTP设置,我使用了秘密文件: :address =&gt; Rails.application.secrets.mailgun_smtp_server, ...

所有这些文件都在.gitignore