从 Elastic Beanstalk 上的 credstash 设置环境变量
Set environment variable from credstash on Elastic Beanstalk
我想从 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)
我已经指定 credstash 应该从 Python:
安装
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_base
在 secrets.yml
中设置为 ENV['SECRET_KEY_BASE']
,因此它应该包含来自 credstash 的值。但是,由于 credstash: command not found
输出,我猜测 credstash 未安装或由于某种原因不在路径上。
有人知道这里会发生什么吗?
答案是将 RAILS_SKIP_ASSET_COMPILATION
设置为 true
。这将跳过 /opt/elasticbeanstalk/hooks/appdeploy/pre/11_asset_compilation.sh
挂钩,该挂钩在安装 credstash 之前运行。
相反,我将其包含在 .config
文件中:
container_commands:
01_assets_compile:
command: bundle exec rake assets:precompile RAILS_ENV=production
这将预编译每个容器上的资产,届时将安装 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)
我已经指定 credstash 应该从 Python:
安装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_base
在 secrets.yml
中设置为 ENV['SECRET_KEY_BASE']
,因此它应该包含来自 credstash 的值。但是,由于 credstash: command not found
输出,我猜测 credstash 未安装或由于某种原因不在路径上。
有人知道这里会发生什么吗?
答案是将 RAILS_SKIP_ASSET_COMPILATION
设置为 true
。这将跳过 /opt/elasticbeanstalk/hooks/appdeploy/pre/11_asset_compilation.sh
挂钩,该挂钩在安装 credstash 之前运行。
相反,我将其包含在 .config
文件中:
container_commands:
01_assets_compile:
command: bundle exec rake assets:precompile RAILS_ENV=production
这将预编译每个容器上的资产,届时将安装 credstash。