在 AWS Elastic Beanstalk 上使用 Docker 预编译资产

Posted

技术标签:

【中文标题】在 AWS Elastic Beanstalk 上使用 Docker 预编译资产【英文标题】:Assets Precompile with Docker on AWS Elastic Beanstalk 【发布时间】:2019-06-17 10:06:48 【问题描述】:

我在 64 位 Amazon Linux/2.12.6 上运行的 Docker 上运行 rails (4.2.10) 应用程序。应用程序运行成功,但是资产管道没有。奇怪的是,我没有收到任何可以看到的错误消息。

另外,app/public/assets 中有资产

例如这个.css文件存在:

<link rel="stylesheet" media="all" href="assets/application-e627105c73433d07311d93ea3e4f53942589150887a45432397a6b1e80017a2e.css">

Dockerfile:

FROM ruby:2.4.2

ENV APP_HOME /app
ENV RAILS_ENV production
ENV RACK_ENV production
ENV SECRET_KEY_BASE 39c3bae00bf53ba9e3...

RUN apt-get update -qq && apt-get install -y --no-install-recommends build-essential
RUN apt-get install -y mysql-client
RUN apt-get install -y libxml2-dev libxslt1-dev
RUN apt-get install -y libqtwebkit4 libqt4-dev xvfb
RUN apt-get install -y nodejs
RUN apt-get clean autoclean \
  && apt-get autoremove -y \
  && rm -rf \
    /var/lib/apt \
    /var/lib/dpkg \
    /var/lib/cache \
    /var/lib/log

RUN mkdir $APP_HOME
RUN mkdir $APP_HOME/tmp
WORKDIR $APP_HOME

ADD Gemfile* $APP_HOME/
RUN (bundle check || bundle install --without development test)

ADD . $APP_HOME

# NOTE: handles migrations (or db:setup if needed)
ENTRYPOINT ["sh", "script/docker/entrypoint.sh"]

RUN bundle exec rake assets:precompile --trace
VOLUME /app/public

EXPOSE 3000

CMD ["script/rails", "s", "-b", "0.0.0.0"]

如果您需要进一步解释或想查看其他内容,请告诉我。

【问题讨论】:

如果你进入一个基于该镜像构建的容器并重新运行 assets 命令,它们会按预期编译吗? 是的,我只看到 elasticsearch 的错误,我认为这是无关的。 【参考方案1】:

您需要在您的config/environments/production.rb 中添加config.public_file_server.enabled = true,或者您可以使用that 之类的环境变量来实现。

但是,您可能希望在您的 Ruby 应用程序服务器前面运行一个 Web 服务器,因此您需要检查我们的反向代理

【讨论】:

感谢您的回答,但据我了解,这仅适用于我使用 Rails 5 并且我使用的是 Rails 4.2.10 @Asdrubal 该配置设置对 rails 4 仍然有效 我不能使用config.serve_static_files = ENV['RAILS_SERVE_STATIC_FILES'].present? 我假设你使用the Asset Pipeline,对吧? @BerkhanBerkdemir 是的

以上是关于在 AWS Elastic Beanstalk 上使用 Docker 预编译资产的主要内容,如果未能解决你的问题,请参考以下文章

在 AWS Elastic Beanstalk 上扩展 Magento

如何在 AWS Elastic Beanstalk 上设置 HTTPS

如何在 AWS Elastic Beanstalk 上设置 HTTPS

在 AWS Elastic Beanstalk 上运行节点和反应

如何使用 aws cli 在 Elastic Beanstalk 上上传和部署?

在aws elastic beanstalk上上传文件?