Устаревшее приложение rails завершается неудачно, когда пытается прекомпилировать ресурсы в докер-контейнере - PullRequest
1 голос
/ 02 апреля 2019

Перемещение устаревшего приложения rails (rails 3.2) в докер. У меня это работает нормально локально с docker-compose. Проблема возникает, когда я пытаюсь собрать контейнер для постановки.

Строка RUN bin/rake assets:precompile завершается сбоем, поскольку она инициализирует приложение при событии прекомпиляции, хотя у меня установлено значение не инициализировать.

Любая помощь будет принята с благодарностью.

Файл Docker

FROM ruby:2.3.8

ARG RAILS_SECRET_KEY
ARG RAILS_ENV=staging
ARG GITHUB_REPO_API_TOKEN
ARG POSTGRES_USER
ARG POSTGRES_PASSWORD
ARG POSTGRES_DB
ARG DATABASE_HOST
ARG FOG_PROVIDER
ARG FOG_REGION
ARG ASSET_FOG_DIRECTORY
ARG AWS_ACCESS_KEY_ID
ARG AWS_SECRET_ACCESS_KEY

# Most of these deps are for running JS tests. You can add whatever extra deps your project has (ffmpeg, imagemagick, etc)
RUN apt-get update

RUN apt-get update -yqq && apt-get install -yqq --no-install-recommends \
  nodejs \
  qt5-default \
  libqt5webkit5-dev \
  xvfb \
  postgresql \
  postgresql-contrib \
  imagemagick \
  openjdk-8-jdk

# cache the gemfile seperate
COPY Gemfile* /usr/src/app/

# required at CLI
ENV BUNDLE_GITHUB__COM=${GITHUB_REPO_API_TOKEN}:x-oauth-basic

# You'll need something here. For development, you don't need anything super secret.
ENV SECRET_KEY_BASE=${RAILS_SECRET_KEY}
ENV RAILS_ENV=${RAILS_ENV}

# this tells container to cd into app directory
WORKDIR /usr/src/app

# so we don't have to reinstall all the gems when we add just one when we build a new container
ENV BUNDLE_PATH /gems

RUN bundle install

# copy app dir into /usr/src/app in container
COPY . /usr/src/app/

RUN bin/rake assets:precompile

# for the irritating times the server doesn't clean up when container shutsdown
ENTRYPOINT ["./docker-entrypoint.sh"]

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

staging.rb

# Compress JavaScripts and CSS
  config.assets.compress = true

  config.assets.initialize_on_precompile = false

Обновление

Ошибка вывода на этот раз, когда бумажный след пытается подключиться к БД, проблема в том. Я создаю образ докера, и поэтому база данных еще не работает, когда ресурсы компилируются. Это ошибка курицы и яйца. Я новичок в докере, поэтому не знаю, как обойти это. В демонстрации я использовал rails 5.2 с использованием веб-упаковщика и пряжи для управления ресурсами, и я не получил эту ошибку при прекомпиляции.

rake aborted!
PG::ConnectionBad: could not translate host name "database" to address: Name or service not known
/gems/gems/activerecord-3.2.22/lib/active_record/connection_adapters/postgresql_adapter.rb:1222:in `initialize'
/gems/gems/activerecord-3.2.22/lib/active_record/connection_adapters/postgresql_adapter.rb:1222:in `new'
/gems/gems/activerecord-3.2.22/lib/active_record/connection_adapters/postgresql_adapter.rb:1222:in `connect'
/gems/gems/activerecord-3.2.22/lib/active_record/connection_adapters/postgresql_adapter.rb:324:in `initialize'
/gems/gems/activerecord-3.2.22/lib/active_record/connection_adapters/postgresql_adapter.rb:28:in `new'
/gems/gems/activerecord-3.2.22/lib/active_record/connection_adapters/postgresql_adapter.rb:28:in `postgresql_connection'
/gems/gems/activerecord-3.2.22/lib/active_record/connection_adapters/abstract/connection_pool.rb:315:in `new_connection'
/gems/gems/activerecord-3.2.22/lib/active_record/connection_adapters/abstract/connection_pool.rb:325:in `checkout_new_connection'
/gems/gems/activerecord-3.2.22/lib/active_record/connection_adapters/abstract/connection_pool.rb:247:in `block (2 levels) in checkout'
/gems/gems/activerecord-3.2.22/lib/active_record/connection_adapters/abstract/connection_pool.rb:242:in `loop'
/gems/gems/activerecord-3.2.22/lib/active_record/connection_adapters/abstract/connection_pool.rb:242:in `block in checkout'
/usr/local/lib/ruby/2.3.0/monitor.rb:214:in `mon_synchronize'
/gems/gems/activerecord-3.2.22/lib/active_record/connection_adapters/abstract/connection_pool.rb:239:in `checkout'
/gems/gems/activerecord-3.2.22/lib/active_record/connection_adapters/abstract/connection_pool.rb:102:in `block in connection'
/usr/local/lib/ruby/2.3.0/monitor.rb:214:in `mon_synchronize'
/gems/gems/activerecord-3.2.22/lib/active_record/connection_adapters/abstract/connection_pool.rb:101:in `connection'
/gems/gems/activerecord-3.2.22/lib/active_record/connection_adapters/abstract/connection_pool.rb:410:in `retrieve_connection'
/gems/gems/activerecord-3.2.22/lib/active_record/connection_adapters/abstract/connection_specification.rb:171:in `retrieve_connection'
/gems/gems/activerecord-3.2.22/lib/active_record/connection_adapters/abstract/connection_specification.rb:145:in `connection'
/gems/gems/activerecord-3.2.22/lib/active_record/model_schema.rb:224:in `table_exists?'
/gems/gems/activerecord-3.2.22/lib/active_record/attribute_methods/primary_key.rb:75:in `get_primary_key'
/gems/gems/activerecord-3.2.22/lib/active_record/attribute_methods/primary_key.rb:60:in `reset_primary_key'
/gems/gems/activerecord-3.2.22/lib/active_record/attribute_methods/primary_key.rb:49:in `primary_key'
/gems/gems/paper_trail-3.0.9/lib/paper_trail/version_concern.rb:67:in `block in timestamp_sort_order'
/gems/gems/paper_trail-3.0.9/lib/paper_trail/version_concern.rb:66:in `tap'
/gems/gems/paper_trail-3.0.9/lib/paper_trail/version_concern.rb:66:in `timestamp_sort_order'
/gems/gems/paper_trail-3.0.9/lib/paper_trail/has_paper_trail.rb:72:in `has_paper_trail'
/usr/src/app/app/models/platform.rb:8:in `<class:Platform>'
/usr/src/app/app/models/platform.rb:1:in `<top (required)>'
/gems/gems/activesupport-3.2.22/lib/active_support/dependencies.rb:251:in `require'
/gems/gems/activesupport-3.2.22/lib/active_support/dependencies.rb:251:in `block in require'
/gems/gems/activesupport-3.2.22/lib/active_support/dependencies.rb:236:in `load_dependency'
/gems/gems/activesupport-3.2.22/lib/active_support/dependencies.rb:251:in `require'
/usr/src/app/lib/route_constraints.rb:2:in `<class:PlatformSite>'
/usr/src/app/lib/route_constraints.rb:1:in `<top (required)>'
/gems/gems/activesupport-3.2.22/lib/active_support/dependencies.rb:251:in `require'
/gems/gems/activesupport-3.2.22/lib/active_support/dependencies.rb:251:in `block in require'
/gems/gems/activesupport-3.2.22/lib/active_support/dependencies.rb:236:in `load_dependency'
/gems/gems/activesupport-3.2.22/lib/active_support/dependencies.rb:251:in `require'
/usr/src/app/lib/payments/providers/paypal_common/ipn.rb:105:in `<top (required)>'
/gems/gems/activesupport-3.2.22/lib/active_support/dependencies.rb:251:in `require'
/gems/gems/activesupport-3.2.22/lib/active_support/dependencies.rb:251:in `block in require'
/gems/gems/activesupport-3.2.22/lib/active_support/dependencies.rb:236:in `load_dependency'
/gems/gems/activesupport-3.2.22/lib/active_support/dependencies.rb:251:in `require'
/usr/src/app/lib/payments/providers/paypal_common/paypal_common.rb:3:in `<top (required)>'
/gems/gems/activesupport-3.2.22/lib/active_support/dependencies.rb:251:in `require'
/gems/gems/activesupport-3.2.22/lib/active_support/dependencies.rb:251:in `block in require'
/gems/gems/activesupport-3.2.22/lib/active_support/dependencies.rb:236:in `load_dependency'
/gems/gems/activesupport-3.2.22/lib/active_support/dependencies.rb:251:in `require'
/usr/src/app/lib/payments/providers/providers.rb:3:in `<top (required)>'
/gems/gems/activesupport-3.2.22/lib/active_support/dependencies.rb:251:in `require'
/gems/gems/activesupport-3.2.22/lib/active_support/dependencies.rb:251:in `block in require'
/gems/gems/activesupport-3.2.22/lib/active_support/dependencies.rb:236:in `load_dependency'
/gems/gems/activesupport-3.2.22/lib/active_support/dependencies.rb:251:in `require'
/usr/src/app/lib/payments/payments.rb:1:in `<top (required)>'
/gems/gems/activesupport-3.2.22/lib/active_support/dependencies.rb:251:in `require'
/gems/gems/activesupport-3.2.22/lib/active_support/dependencies.rb:251:in `block in require'
/gems/gems/activesupport-3.2.22/lib/active_support/dependencies.rb:236:in `load_dependency'
/gems/gems/activesupport-3.2.22/lib/active_support/dependencies.rb:251:in `require'
/usr/src/app/config/initializers/z_custom_modules.rb:21:in `<top (required)>'
/gems/gems/activesupport-3.2.22/lib/active_support/dependencies.rb:245:in `load'
/gems/gems/activesupport-3.2.22/lib/active_support/dependencies.rb:245:in `block in load'
/gems/gems/activesupport-3.2.22/lib/active_support/dependencies.rb:236:in `load_dependency'
/gems/gems/activesupport-3.2.22/lib/active_support/dependencies.rb:245:in `load'
/gems/gems/railties-3.2.22/lib/rails/engine.rb:593:in `block (2 levels) in <class:Engine>'
/gems/gems/railties-3.2.22/lib/rails/engine.rb:592:in `each'
/gems/gems/railties-3.2.22/lib/rails/engine.rb:592:in `block in <class:Engine>'
/gems/gems/railties-3.2.22/lib/rails/initializable.rb:30:in `instance_exec'
/gems/gems/railties-3.2.22/lib/rails/initializable.rb:30:in `run'
/gems/gems/railties-3.2.22/lib/rails/initializable.rb:55:in `block in run_initializers'
/gems/gems/railties-3.2.22/lib/rails/initializable.rb:54:in `each'
/gems/gems/railties-3.2.22/lib/rails/initializable.rb:54:in `run_initializers'
/gems/gems/railties-3.2.22/lib/rails/application.rb:136:in `initialize!'
/gems/gems/railties-3.2.22/lib/rails/railtie/configurable.rb:30:in `method_missing'
/usr/src/app/config/environment.rb:5:in `<top (required)>'
/gems/gems/activesupport-3.2.22/lib/active_support/dependencies.rb:251:in `require'
/gems/gems/activesupport-3.2.22/lib/active_support/dependencies.rb:251:in `block in require'
/gems/gems/activesupport-3.2.22/lib/active_support/dependencies.rb:236:in `load_dependency'
/gems/gems/activesupport-3.2.22/lib/active_support/dependencies.rb:251:in `require'
/gems/gems/railties-3.2.22/lib/rails/application.rb:103:in `require_environment!'
/gems/gems/railties-3.2.22/lib/rails/application.rb:305:in `block (2 levels) in initialize_tasks'
/gems/gems/rake-12.3.1/lib/rake/task.rb:271:in `block in execute'
/gems/gems/rake-12.3.1/lib/rake/task.rb:271:in `each'
/gems/gems/rake-12.3.1/lib/rake/task.rb:271:in `execute'
/gems/gems/rake-12.3.1/lib/rake/task.rb:213:in `block in invoke_with_call_chain'
/usr/local/lib/ruby/2.3.0/monitor.rb:214:in `mon_synchronize'
/gems/gems/rake-12.3.1/lib/rake/task.rb:193:in `invoke_with_call_chain'
/gems/gems/rake-12.3.1/lib/rake/task.rb:237:in `block in invoke_prerequisites'
/gems/gems/rake-12.3.1/lib/rake/task.rb:235:in `each'
/gems/gems/rake-12.3.1/lib/rake/task.rb:235:in `invoke_prerequisites'
/gems/gems/rake-12.3.1/lib/rake/task.rb:212:in `block in invoke_with_call_chain'
/usr/local/lib/ruby/2.3.0/monitor.rb:214:in `mon_synchronize'
/gems/gems/rake-12.3.1/lib/rake/task.rb:193:in `invoke_with_call_chain'
/gems/gems/rake-12.3.1/lib/rake/task.rb:182:in `invoke'
/gems/gems/ckeditor-4.1.6/lib/tasks/ckeditor.rake:24:in `block in <top (required)>'
/gems/gems/rake-12.3.1/lib/rake/task.rb:271:in `block in execute'
/gems/gems/rake-12.3.1/lib/rake/task.rb:271:in `each'
/gems/gems/rake-12.3.1/lib/rake/task.rb:271:in `execute'
/gems/gems/rake-12.3.1/lib/rake/task.rb:213:in `block in invoke_with_call_chain'
/usr/local/lib/ruby/2.3.0/monitor.rb:214:in `mon_synchronize'
/gems/gems/rake-12.3.1/lib/rake/task.rb:193:in `invoke_with_call_chain'
/gems/gems/rake-12.3.1/lib/rake/task.rb:182:in `invoke'
/gems/gems/rake-12.3.1/lib/rake/application.rb:160:in `invoke_task'
/gems/gems/rake-12.3.1/lib/rake/application.rb:116:in `block (2 levels) in top_level'
/gems/gems/rake-12.3.1/lib/rake/application.rb:116:in `each'
/gems/gems/rake-12.3.1/lib/rake/application.rb:116:in `block in top_level'
/gems/gems/rake-12.3.1/lib/rake/application.rb:125:in `run_with_threads'
/gems/gems/rake-12.3.1/lib/rake/application.rb:110:in `top_level'
/gems/gems/rake-12.3.1/lib/rake/application.rb:83:in `block in run'
/gems/gems/rake-12.3.1/lib/rake/application.rb:186:in `standard_exception_handling'
/gems/gems/rake-12.3.1/lib/rake/application.rb:80:in `run'
/gems/gems/rake-12.3.1/exe/rake:27:in `<top (required)>'
bin/rake:3:in `load'
bin/rake:3:in `<main>'
Tasks: TOP => ckeditor:nondigest => environment

Обновление 2

Итак, я нашел способ предотвратить соединение с БД. Но теперь я получаю сообщение об ошибке при попытке подключиться к Redis. Вот база данных. DB_ADAPTER использует activerecord-nulldb-adapter драгоценный камень. Я все еще не уверен, почему config.assets.initialize_on_precompile = false все еще инициализирует приложение. Ходовые рельсы 3,2

default: &default
  adapter: <%= ENV['DB_ADAPTER'] ||= 'postgresql' %>
  encoding: unicode
  host: <%= ENV['DATABASE_HOST'] ||= '' %>
  username: <%= ENV['POSTGRES_USER'] ||= '' %>
  password: <%= ENV['POSTGRES_PASSWORD'] ||= '' %>
  database: <%= ENV['POSTGRES_DB'] ||= '' %>
  pool: 5
staging:
  <<: *default
development:
  <<: *default
test:
  <<: *default
  database: ce_test2
rspec:
  <<: *default
  database: ce_test2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...