使用AWS OpsWorks设计gem初始化

时间:2017-02-13 15:39:06

标签: ruby-on-rails devise aws-opsworks

背景信息:我已经制作了一个使用ruby gem Devise的Ruby on Rails应用程序。使用gem时,我已将OpsWorks控制台中gem的密钥配置为环境变量。

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时出错'执行[rake   资产:预编译]'       Mixlib :: ShellOut :: ShellCommandFailed

     

预期进程以[0]退出,但已收到' 1'   ----开始输出bundle exec rake assets:precompile --trace ---- STDOUT:STDERR:

     

**调用资产:预编译(first_time)   **调用资产:环境(first_time)

     

**执行资产:环境

     

**调用环境(first_time)

     

**执行环境耙中止! Devise.secret_key没有设置。请将以下内容添加到您的Devise初始化程序中:

     

config.secret_key =' *****'

我知道最终会设置环境变量,因为在我的before_migrate.rb文件中,我将环境变量输出到log。当我硬编码config.secret_key时,一切正常。

问题:在使用OpsWorks时,我的项目中的初始值设定项config/initializers/*是否会在任何环境变量设置之前运行?如果没有硬编码密钥或SSH连接到每个实例,还有另一种解决方法吗?

1 个答案:

答案 0 :(得分:0)

您可以通过

access在厨师食谱中SUMIFS环境变量
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

现在您将在代码路径/ config中生成secrets.yml。您必须加载该yaml并将其设置在config / initializer / devise.rb

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