[英]Devise gem initialization with AWS OpsWorks
背景信息:我制作了一個利用ruby gem Devise的Ruby on Rails應用程序。 使用gem時,我已在OpsWorks控制台中將gem的秘密密鑰配置為環境變量。
在運行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
執行在資源'execute [rake asset:precompile]'上
run
操作時出錯,Mixlib :: ShellOut :: ShellCommandFailed預期進程以[0]退出,但接收到“ 1” ----開始輸出包執行耙資產:precompile --trace ---- STDOUT:STDERR:
**調用資產:預編譯(第一次)**調用資產:環境(第一次)
**執行資產:環境
**調用環境(首次)
**執行環境耙被中止! 未設置Devise.secret_key。 請將以下內容添加到您的Devise初始化程序中:
config.secret_key ='*****'
我知道最終會設置環境變量,因為在我的before_migrate.rb
文件中,我將環境變量輸出到日志中。 當我對config.secret_key
硬編碼時,一切正常。
問題:使用OpsWorks時,是否在設置任何環境變量之前運行了我項目中的初始化程序config/initializers/*
? 是否有另一種方法可以解決,而無需對每個實例進行硬編碼密鑰或SSH連接?
您可以通過以下方式訪問廚師食譜中的環境變量:
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放在/ data / YOUR_APPLICATION_SLUG_NAME / shared / config中 。
your_cookbook /食譜/默認/ secret.rb
template "/data/#{<YOUR_APP_SLUG_NAME}/shared/config/secrets.yml" do
source "secrets.yml.erb"
owner 'OWNER'
end
並確保將shared / 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
。
現在,您已經在代碼路徑/配置中生成了secrets.yml。 您必須加載該Yaml並在config / initializer / devise.rb中進行設置
config.secret_key = <SECRET KEY FROM THE YML GENERATED>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.