2015-02-23 72 views
1

我試圖在生產模式下獲得我的ENV變量... 但現在的方式..無法到達服務器...未找到SECRET_KEY_BASE ...如果硬編碼它,然後去麻煩W上的數據庫creds,如果我硬編碼他們,得到了麻煩W上的SMTP creds ...Rails 4 - 無法獲取生產中的ENV變量

這意味着沒有ENV []不能達到變量...

我增加了gemfile讓它在生產環境中捆綁它

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

我.ENV文件存在於我的遠程服務器(14 Ubuntu的 - 瓦特.rbenv紅寶石2.0,R a是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 
    [email protected] 
    MAILGUN_SMTP_PASSWORD=2fc998a7399999999a264b88c 
    MAILGUN_SMTP_DOMAIN=mydomain.com 

我設置遠程服務器

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

我在我的secrets.yml文件設置我的database.yml

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

,我更新了我的config /環境/ production.rbW¯¯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

你在哪裏運行的生產環境? Heroku的?通常情況下,dotenv寶石是一種幫助開發但不能用於生產的方式... – 2015-02-23 16:15:12

+0

您是否將.env鏈接到當前文件夾? – jerrytao 2015-02-23 17:04:47

回答

0

最後我給瓦特.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的形式上傳這些作品從本地文件。生產文件和鏈接它們...所以

服務器的database.yml加載/鏈接(從本地database.production.yml)

服務器secrets.yml加載/(從本地secrets.production.yml)

服務器application.yml加載/鏈接的鏈接(從本地application.production.yml)

關於production.rb SMTP設置,我使用的祕密文件: :地址=> Rails.application.secrets.mailgun_smtp_server, ...

所有這些文件都在的.gitignore