在添加/删除 ENV 变量时,Elastic Beanstalk 导致我的 Rails 6 应用程序预编译资产中断
Posted
技术标签:
【中文标题】在添加/删除 ENV 变量时,Elastic Beanstalk 导致我的 Rails 6 应用程序预编译资产中断【英文标题】:Elastic Beanstalk is causing my Rails 6 app precompiled assets to break when adding/removing ENV variables 【发布时间】:2020-10-17 09:23:06 【问题描述】:我可以使代码部署没有问题,一切正常。问题是当我使用 Elastic Beanstalk Web 配置表单或 EB CLI 添加/删除/修改 ENV 变量时。
Elastic Beanstalk 报告更改已成功完成,但是当我在浏览器中访问 Web 应用程序时,我的标准 Rails 错误“抱歉,出了点问题”。
SSH 进入服务器查看日志文件显示与丢失资产相关的错误。查看应用程序的“公共”文件夹,不再有包含预编译资产的“资产”文件夹,这在我部署代码更改时通常会出现。
我有以下可能相关的 ENV 设置:
RAILS_SERVE_STATIC_FILES: true
RAILS_SKIP_ASSET_COMPILATION: false
RACK_ENV: production
RAILS_ENV: production
我的生产环境配置:
Rails.application.configure do
config.cache_classes = true
config.eager_load = true
config.consider_all_requests_local = false
config.action_controller.perform_caching = true
config.public_file_server.enabled = ENV["RAILS_SERVE_STATIC_FILES"].present?
config.assets.compile = false
config.active_storage.service = :amazon
config.force_ssl = ENV.fetch("FORCE_SSL", false)
config.ssl_options = redirect: exclude: ->(request) request.path =~ /health-check/
config.log_level = :debug
config.log_tags = [:request_id]
config.action_mailer.perform_caching = false
config.i18n.fallbacks = true
config.active_support.deprecation = :notify
config.log_formatter = ::Logger::Formatter.new
if ENV["RAILS_LOG_TO_STDOUT"].present?
logger = ActiveSupport::Logger.new(STDOUT)
logger.formatter = config.log_formatter
config.logger = ActiveSupport::TaggedLogging.new(logger)
end
config.active_record.dump_schema_after_migration = false
end
为了解决这个问题,我只是重新部署了最后提交的代码,部署过程负责生成丢失的预编译资产。
有没有人遇到过这个问题或对这里发生的事情有任何见解?
【问题讨论】:
【参考方案1】:我遇到了同样的问题。
在 2020 年 8 月之前,我们无法挂钩这些事件,但在问题修复并为 AL2 发布平台之后,它变得易于管理。
您可以使用 confighooks
挂钩 beanstalk 配置更改。
创建.platform/confighooks/predeploy/01_assets_precompile.sh
喜欢...
#!/bin/bash
source /root/.bash_profile
source <(sed -E -n 's/[^#]+/export &/ p' /opt/elasticbeanstalk/deployment/env)
cd /var/app/staging; bundle exec rake assets:precompile
chown -R webapp:webapp /var/app/staging/
部署这些脚本,并更改 beanstalk 的环境变量。
另请参阅。
https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/platforms-linux-extend.html https://github.com/aws/elastic-beanstalk-roadmap/issues/59【讨论】:
感谢您的回复。看起来您的示例 bash 脚本应该与添加的配置挂钩支持一起使用! 这样的东西应该是平台的一部分,不需要自定义脚本以上是关于在添加/删除 ENV 变量时,Elastic Beanstalk 导致我的 Rails 6 应用程序预编译资产中断的主要内容,如果未能解决你的问题,请参考以下文章
在 AWS Elastic Beanstalk 下设置 node.js process.env 变量
AWS Elastic Beanstalk 中的 Laravel .env
在控制台中设置 Elastic Beanstalk 环境变量与从部署中传递它们