Rails 6凭证在AWS Beanstalk中:ArgumentError:密钥必须为16个字节

问题描述 投票:0回答:1

我撞墙了。我正在通过Elastic Beanstalk将Rails 6应用程序部署到AWS。部署是通过eb cli完成的,而我正在使用git来完成。

无论我尝试什么,我遇到的错误都是:ArgumentError: key must be 16 bytes

[这在我尝试访问使用环境密钥和Rails.application.credentials.sendgrid[:api_key]设置的加密凭证(例如EDITOR="mvim -f" rails credentials:edit --environment production]时发生

我所见过的一切都在使用Rails 5.2,并且一切似乎都使用master.key而不是特定于环境的yml文件存储。

我尝试过的:

  1. 在EB Web控制台的环境属性中设置RAILS_MASTER_KEY
  2. 我可以执行eb printenv,并且确实可以看到此键
  3. config/production.rb中,我已经设置了config.require_master_key = true
  4. 我尝试将RAILS_PRODUCTION_KEY设置为与主密钥相同,但还是没有运气
  5. 我将RAILS_ENVproduction作为环境属性添加为值
  6. 我添加了我自己的容器ebextensions,用于运行迁移和预编译的东西,并且每当我尝试检索凭据时,它们仍然以相同的方式出错。

总体来说,似乎无法正确获取主密钥,并且它抱怨密钥不是正确的16个字节。

当我在本地运行RAILS_ENV=production bundle exec rails c时,它工作正常,我可以获得所有凭据。

这是我的.ebextensions / config文件:

# Beanstalk ain't ready for Rails 6. This fix is courtesy of https://austingwalters.com/rails-6-on-elastic-beanstalk/
# Additional node 6 cleanup courtesy of https://github.com/nodesource/distributions/issues/486

commands:
  00_remove_node_6_if_present:
    command: "/bin/rm -rf /var/cache/yum && /usr/bin/yum remove -y nodejs && /bin/rm /etc/yum.repos.d/nodesource* && /usr/bin/yum clean all"
    ignoreErrors: true
  01_download_nodejs:
    command: "curl --silent --location https://rpm.nodesource.com/setup_8.x | sudo bash -"
  02_install_nodejs:
    command: "yum -y install nodejs"
  03_install_yarn:
    command: "sudo wget https://dl.yarnpkg.com/rpm/yarn.repo -O /etc/yum.repos.d/yarn.repo && sudo yum install yarn -y"
  04_mkdir_webapp_dir:
    command: "mkdir /home/webapp"
    ignoreErrors: true
  05_chown_webapp_dir:
    command: "chown webapp:webapp /home/webapp"
    ignoreErrors: true
  06_chmod_webapp_dir:
    command: "chmod 0744 /home/webapp"
    ignoreErrors: true
  07_chmod_logs:
    command: "chown webapp:webapp -R /var/app/current/log/"
    ignoreErrors: true
  08_create_log_file:
    command: "touch /var/app/current/log/production.log"
    ignoreErrors: true
  09_chown_log_production:
    command: "chown webapp:webapp /var/app/current/log/production.log"
    ignoreErrors: true
  10_chmod_log_dir:
    command: "chmod 0664 -R /var/app/current/log/"
    ignoreErrors: true
  11_update_bundler:
    command: "gem update bundler"
    ignoreErrors: true
  12_config_for_update_nokogiri:
    command: "bundle config build.nokogiri --use-system-libraries"
  13_chown_current:
    command: "chown webapp:webapp -R /var/app/current/"
    ignoreErrors: true
  14_chmod_current:
    command: "chmod 0755 -R /var/app/current/"
    ignoreErrors: true
  15_chown_current:
    command: "chown webapp:webapp -R /var/app/ondeck/"
    ignoreErrors: true
  16_chown_current:
    command: "chmod 0644 -R /var/app/ondeck/"
    ignoreErrors: true

container_commands:

  17_install_webpack:
    command: "npm install --save-dev webpack"
  18_config_for_update_nokogiri:
    command: "bundle config build.nokogiri --use-system-libraries"
  19_precompile:
    command: "RAILS_ENV=production bundle exec rake assets:precompile"
  20_database_migration:
    leader_only: true
    command: "RAILS_ENV=production bundle exec rake db:migrate"
amazon-elastic-beanstalk ruby-on-rails-6
1个回答
0
投票

解决问题的方法:

eb setenv RAILS_MASTER_KEY=XXXXXXXX

即使我在EB Web控制台中设置了此环境属性,由于某种原因,它还是没有被采用。在控制台中对其进行设置后,它将给我成功的更新消息。

Environment update completed successfully.

但是一旦我完成$eb deploy,我就会在事件中看到这一点:

Environment update is starting.

这让我相信它会覆盖控制台中设置的所有环境变量,或者至少是在某种程度上设置了我想要的其他子集。一旦尝试$eb setenv RAILS_MASTER_KEY=XXX,就可以找到rails凭证。

© www.soinside.com 2019 - 2024. All rights reserved.