2017-02-13 23 views
2

背景信息:我已經制作了一個Ruby on Rails應用程序,它利用了紅寶石寶石Devise。在使用寶石時,我已將OpsWorks控制檯中的寶石密鑰配置爲環境變量。使用AWS設計初始化寶石OpsWorks

Environment Variables in OpsWorks console

當運行before_migrate.rb部署掛鉤我運行命令rake assets:precompile。但是我在部署日誌中收到錯誤。

execute "rake assets:precompile" do 
    cwd release_path 
    command "bundle exec rake assets:precompile" 
    environment "RAILS_ENV" => rails_env 
end 

上資源執行動作run錯誤 '執行[耙 資產:預編譯]' Mixlib :: ShellOut :: ShellCommandFailed

預期處理與[0],但接收到的「退出1 ' ----開始束EXEC耙資產的輸出:預編譯--trace ---- STDOUT:STDERR:

**調用資產:預編譯(FIRST_TIME) **調用資產:環境(first_ti我)

**執行資產:環境

**調用環境(FIRST_TIME)

**,可執行環境耙中止! Devise.secret_key未設置。請注意以下添加到您的設計初始化:

config.secret_key =「*****」

我所知道的環境變量,最終被我的before_migrate.rb文件I輸出設置,因爲環境變量登錄。當我硬編碼config.secret_key一切工作正常。

問題:在使用OpsWorks時,我的項目中的初始化程序config/initializers/*在任何環境變量設置之前運行?有沒有另一種解決方法,沒有硬編碼密鑰或SSH到每個實例?

+0

是你不能夠簡單地通過** config.secret_key = ENV [「SECRET_KEY_BASE」]訪問它**? – BinaryMee

+0

這是正確的。我先試了一下,但沒有奏效。 – Asdrubal

回答

0

您將能夠在access由廚師食譜環境變量,

node[:deploy]['<YOUR_APP_SHORT_NAME>'][:environment_variables][:SECRET_KEY_BASE] 

所以,你可以寫一個食譜把secrets.yml或something.yml與環境價值。 創建一個模板,

your_cookbook /模板/默認/ secret.yml.erb

secret_key: <%= node[:deploy]['<YOUR_APP_SHORT_NAME>'][:environment_variables][:SECRET_KEY_BASE] %> 

您可以將secret.yml/數據/ YOUR_APPLICATION_SLUG_NAME /共享/配置一個食譜。

your_cookbook/recipes/default/secret。RB

template "/data/#{<YOUR_APP_SLUG_NAME}/shared/config/secrets.yml" do 
    source "secrets.yml.erb" 
    owner 'OWNER' 
end 

,並確保你符號鏈接共享/ config文件夾中secrets.yml於您的發行路徑before_migrate.rb在你部署掛鉤。

your_code_path /部署/ before_migrate.rb

run "ln -nfs /data/<YOUR_APP_SLUG_NAME>/shared/config/secrets.yml #{release_path}/config/secrets.yml" 

而且在你部署生命週期事件配方your_cookbook::secret

現在,您將在代碼路徑/ config中生成secrets.yml。你必須加載YAML,並將其設置在配置/初始化/ devise.rb

config.secret_key = <SECRET KEY FROM THE YML GENERATED> 
+0

謝謝你的回答。我會試一試,並讓你知道它是如何發生的。 – Asdrubal