Rails 6 на Heroku: ActiveRecord :: AdapterNotSpecified: в конфигурации базы данных не указан адаптер - PullRequest
0 голосов
/ 26 октября 2019

Наше приложение Rails только что было обновлено до Rails 6.0, но развертывание в Heroku завершается неудачно с:

Preparing app for Rails asset pipeline
Running: rake assets:precompile
DEPRECATION WARNING: Including LoggerSilence is deprecated and will be removed in Rails 6.1. Please use `ActiveSupport::LoggerSilence` instead (called from <top (required)> at /tmp/build_b9759d496c72c1085bb8441e3c2159fb/config/application.rb:7)
rake aborted!
ActiveRecord::AdapterNotSpecified: database configuration does not specify adapter   
/tmp/build_b9759d496c72c1085bb8441e3c2159fb/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0/lib/active_record/connection_adapters/connection_specification.rb:163:in `spec'

config / database.yml:

default: &default
  adapter: postgresql
  encoding: utf8
  pool: 5
  username: <%= ENV['POSTGRESQL_USER'] %>
  password:
  socket: /tmp/mysql.sock

development:
  <<: *default
  database: OurApplication_development

test:
  <<: *default
  database: OurApplication_test

production:
  url: <%= ENV['DATABASE_URL'] %>

Использование версии:

  • rails (6.0.0)
  • Ruby (2.6.5)

У кого-нибудь есть идеи, как решить эту проблему?

Ответы [ 2 ]

1 голос
/ 27 октября 2019

Лучшим решением было бы просто использовать ENV["DATABASE_URL"], чтобы указать детали подключения и сохранить для сегмента по умолчанию фактические минимальные значения по умолчанию:

default: &default
  adapter: postgresql
  encoding: utf8
  pool: 5

development:
  <<: *default
  database: OurApplication_development

test:
  <<: *default
  database: OurApplication_test

production:
  # doing url: is just stupid as thats what rails does anyways
  <<: *default

Это позволяет избежать потенциальных войн разработчиков. Вы можете использовать DotEnv для загрузки различных переменных ENV для каждой среды. В качестве альтернативы вы можете добавить еще один хеш в ваш database.yml и объединить его:

default: &default
  adapter: postgresql
  encoding: utf8
  pool: 5

local_settings: &local_settings
  # will raise an exception on nil instead of failing silently
  username: <%= ENV.fetch('POSTGRESQL_USER') %> 
  password:
  socket: /tmp/mysql.sock

development:
  <<: *default
  <<: *local_settings
  database: OurApplication_development

test:
  <<: *default
  <<: *local_settings
  database: OurApplication_test

production:
  # doing url: is just stupid as thats what rails does anyways
  <<: *default
1 голос
/ 26 октября 2019

Проблема была решена путем добавления «адаптера» в «production» в database.yml. В этом не было необходимости, когда наш проект был на Rails 4 и 5.

production:
 adapter: postgresql
...