簡體   English   中英

使用AWS OpsWorks設計gem初始化

[英]Devise gem initialization with AWS OpsWorks

背景信息:我制作了一個利用ruby gem Devise的Ruby on Rails應用程序。 使用gem時,我已在OpsWorks控制台中將gem的秘密密鑰配置為環境變量。

OpsWorks控制台中的環境變量

在運行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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM