在Elastic Beanstalk上从credstash设置环境变量

时间:2019-02-12 11:29:15

标签: ruby-on-rails amazon-web-services amazon-elastic-beanstalk credstash

我要从credstash设置的Elastic Beanstalk环境变量遇到一些问题。

option_settings:
  - namespace: aws:elasticbeanstalk:application:environment
    option_name: SECRET_KEY_BASE
    value: $(credstash --region eu-west-1 -t credstash get test.secret_key_base)

我指定应从Python安装credstash:

packages:
  python:
    credstash: []

但是,当我部署资产时,预编译失败(rake assets:precompile)。

EB运行状况页面显示应用程序部署失败。

/opt/elasticbeanstalk/support/envvars: line 5: credstash: command not found
...
+ su -s /bin/bash -c 'bundle exec rake assets:precompile' webapp
`/home/webapp` is not a directory.
Bundler will use `/tmp/bundler/home/webapp' as your home directory temporarily.
rake aborted!
ArgumentError: `secret_key_base` for production environment must be a type of String`

secret_key_baseENV['SECRET_KEY_BASE']中设置为secrets.yml,因此它应包含credstash中的值。但是,由于输出credstash: command not found,我猜测credstash尚未安装或由于某种原因不在路径上。

有人知道这里会发生什么吗?

1 个答案:

答案 0 :(得分:0)

答案是将RAILS_SKIP_ASSET_COMPILATION设置为true。这将跳过安装credstash之前运行的/opt/elasticbeanstalk/hooks/appdeploy/pre/11_asset_compilation.sh挂钩。

相反,我将其包含在.config文件中:

container_commands:
  01_assets_compile:
    command: bundle exec rake assets:precompile RAILS_ENV=production

这将在安装credstash时预编译每个容器上的资产。