我试图让我的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
}
...
答案 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
中