ruby-on-rails - 构建映像失败时在 Dockerfile 中运行“bin/rails assets:precompile”
问题描述
我正在尝试建立我的生产形象,但我遇到了问题。
我运行这个命令
docker build -f docker/production/app/Dockerfile .
Dockerfile 是
FROM ruby:2.7.1-alpine3.12
# Install dependencies:
# - build-base: To ensure certain gems can be compiled
# - mysql-dev: Communicate with mysql through the mysql2 gem
# - libxslt-dev libxml2-dev: Nokogiri native dependencies
RUN apk --update --no-cache add build-base tzdata mysql-dev libxslt-dev libxml2-dev nodejs
RUN apk add --no-cache yarn --repository="http://dl-cdn.alpinelinux.org/alpine/edge/community"
ENV RAILS_ROOT /var/www/app
RUN mkdir -p $RAILS_ROOT
COPY Gemfile* /var/www/app/
WORKDIR /var/www/app
RUN bundle config set without 'development test'
RUN bundle install --jobs 20 --retry 5
COPY package.json package.json
COPY yarn.lock yarn.lock
RUN yarn install --check-files
COPY . /var/www/app/
EXPOSE 3000
# Clean up APK when done.
RUN rm -f /var/cache/apk/*
RUN bin/rails assets:precompile
ENTRYPOINT ["./docker-entrypoint.sh"]
CMD ["bundle", "exec", "puma", "-C", "config/puma/production.rb"]
码头工人组成是
version: '3.5'
services:
app:
image: XYZ
env_file:
- docker/production/.env/redis
- docker/production/.env/database
- docker/production/.env/app
运行命令“bin/rails assets:precompile”时,我遇到了这个问题
Step 17/19 : RUN bin/rails assets:precompile
---> Running in 57c98721e8c6
rails aborted!
KeyError: key not found: "REDIS_SERVER"
/var/www/app/config/initializers/sidekiq.rb:19:in `fetch'
/var/www/app/config/initializers/sidekiq.rb:19:in `block in <main>'
/usr/local/bundle/gems/sidekiq-6.0.7/lib/sidekiq.rb:85:in `configure_client'
/var/www/app/config/initializers/sidekiq.rb:18:in `<main>'
/usr/local/bundle/gems/bootsnap-1.4.6/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:55:in `load'
/usr/local/bundle/gems/bootsnap-1.4.6/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:55:in `load'
/usr/local/bundle/gems/activesupport-6.0.3.2/lib/active_support/dependencies.rb:318:in `block in load'
/usr/local/bundle/gems/activesupport-6.0.3.2/lib/active_support/dependencies.rb:291:in `load_dependency'
/usr/local/bundle/gems/activesupport-6.0.3.2/lib/active_support/dependencies.rb:318:in `load'
/usr/local/bundle/gems/railties-6.0.3.2/lib/rails/engine.rb:666:in `block in load_config_initializer'
/usr/local/bundle/gems/activesupport-6.0.3.2/lib/active_support/notifications.rb:182:in `instrument'
/usr/local/bundle/gems/railties-6.0.3.2/lib/rails/engine.rb:665:in `load_config_initializer'
/usr/local/bundle/gems/railties-6.0.3.2/lib/rails/engine.rb:625:in `block (2 levels) in <class:Engine>'
/usr/local/bundle/gems/railties-6.0.3.2/lib/rails/engine.rb:624:in `each'
/usr/local/bundle/gems/railties-6.0.3.2/lib/rails/engine.rb:624:in `block in <class:Engine>'
/usr/local/bundle/gems/railties-6.0.3.2/lib/rails/initializable.rb:32:in `instance_exec'
/usr/local/bundle/gems/railties-6.0.3.2/lib/rails/initializable.rb:32:in `run'
/usr/local/bundle/gems/railties-6.0.3.2/lib/rails/initializable.rb:61:in `block in run_initializers'
/usr/local/bundle/gems/railties-6.0.3.2/lib/rails/initializable.rb:50:in `each'
/usr/local/bundle/gems/railties-6.0.3.2/lib/rails/initializable.rb:50:in `tsort_each_child'
/usr/local/bundle/gems/railties-6.0.3.2/lib/rails/initializable.rb:60:in `run_initializers'
/usr/local/bundle/gems/railties-6.0.3.2/lib/rails/application.rb:363:in `initialize!'
/var/www/app/config/environment.rb:5:in `<main>'
/usr/local/bundle/gems/bootsnap-1.4.6/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:in `require'
/usr/local/bundle/gems/bootsnap-1.4.6/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:in `block in require_with_bootsnap_lfi'
/usr/local/bundle/gems/bootsnap-1.4.6/lib/bootsnap/load_path_cache/loaded_features_index.rb:92:in `register'
/usr/local/bundle/gems/bootsnap-1.4.6/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `require_with_bootsnap_lfi'
/usr/local/bundle/gems/bootsnap-1.4.6/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:31:in `require'
/usr/local/bundle/gems/zeitwerk-2.3.1/lib/zeitwerk/kernel.rb:34:in `require'
/usr/local/bundle/gems/activesupport-6.0.3.2/lib/active_support/dependencies.rb:324:in `block in require'
/usr/local/bundle/gems/activesupport-6.0.3.2/lib/active_support/dependencies.rb:291:in `load_dependency'
/usr/local/bundle/gems/activesupport-6.0.3.2/lib/active_support/dependencies.rb:324:in `require'
/usr/local/bundle/gems/railties-6.0.3.2/lib/rails/application.rb:339:in `require_environment!'
/usr/local/bundle/gems/railties-6.0.3.2/lib/rails/application.rb:523:in `block in run_tasks_blocks'
/usr/local/bundle/gems/sprockets-rails-3.2.1/lib/sprockets/rails/task.rb:62:in `block (2 levels) in define'
/usr/local/bundle/gems/railties-6.0.3.2/lib/rails/commands/rake/rake_command.rb:23:in `block in perform'
/usr/local/bundle/gems/railties-6.0.3.2/lib/rails/commands/rake/rake_command.rb:20:in `perform'
/usr/local/bundle/gems/railties-6.0.3.2/lib/rails/command.rb:48:in `invoke'
/usr/local/bundle/gems/railties-6.0.3.2/lib/rails/commands.rb:18:in `<main>'
/usr/local/bundle/gems/bootsnap-1.4.6/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:in `require'
/usr/local/bundle/gems/bootsnap-1.4.6/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:in `block in require_with_bootsnap_lfi'
/usr/local/bundle/gems/bootsnap-1.4.6/lib/bootsnap/load_path_cache/loaded_features_index.rb:92:in `register'
/usr/local/bundle/gems/bootsnap-1.4.6/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `require_with_bootsnap_lfi'
/usr/local/bundle/gems/bootsnap-1.4.6/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:31:in `require'
/usr/local/bundle/gems/activesupport-6.0.3.2/lib/active_support/dependencies.rb:324:in `block in require'
/usr/local/bundle/gems/activesupport-6.0.3.2/lib/active_support/dependencies.rb:291:in `load_dependency'
/usr/local/bundle/gems/activesupport-6.0.3.2/lib/active_support/dependencies.rb:324:in `require'
bin/rails:4:in `<main>'
Tasks: TOP => environment
(See full trace by running task with --trace)
The command '/bin/sh -c bin/rails assets:precompile' returned a non-zero code: 1
Docker 无法访问环境变量。在我的 config/initializers/sidekiq.rb 中,我有
Sidekiq.configure_server do |config|
config.redis = { url: ENV.fetch('REDIS_SERVER') }
end
我在像这样的文件中配置我的环境变量
docker/production/.env/redis
docker/production/.env/database
docker/production/.env/app
有没有办法让 docker 访问这些文件?
问候。
解决方案
推荐阅读
- c# - 首次渲染时 Blazor 组件引用为空
- python - re.sub 表示法的差异
- javascript - 有人可以澄清这些参数是如何传递的吗?
- sql-server - 在 SQL Server 中将十进制转换为不带 0x 的十六进制字符串
- reactjs - 如何修复错误:未处理的拒绝(TypeError):meetups.map 不是函数
- javascript - 反应.js。如何更改关键字“this”
- python - 在 Docker 上运行自动重新加载烧瓶应用程序时出错
- javascript - 创建一个得分最高的数组
- vue.js - vue 组件不会重新渲染
- python - 如何在此打印列表的末尾添加句号?