в конфигурации базы данных не указан адаптер - PullRequest
61 голосов
/ 05 января 2009

Я получаю эту ошибку, когда пытаюсь подключиться к базе данных mysql. Проблема в том, что приложение работает неделями, а затем случайным образом я получаю это сообщение. Когда я получаю это сообщение об ошибке, приложение не может повторно подключиться к базе данных, пока я не перезапущу ее.

Я использую файл конфигурации для подключения к базе данных, и указан адаптер ... конфигурация базы данных не создается во время выполнения.

Есть ли у вас какие-либо идеи о том, что происходит?

Ответы [ 23 ]

68 голосов
/ 08 декабря 2012

Когда я попытался запустить скрипт командной строки (скажем, «my_script» здесь), произошла та же ошибка. Причины были:

  1. Там есть только производственная среда.
  2. Я пропустил установку RAILS_ENV для командной строки.

Итак, решение в моем случае следующее:

$ RAILS_ENV = production my_script

35 голосов
/ 20 ноября 2009

У меня только что была эта проблема, и она была вызвана опечаткой в ​​моем файле configration.yml.

У меня изначально было это:

production:
  adapter:mysql

Когда я хотел получить это:

production:
  adapter: mysql

Этот маленький пробел между адаптером и mysql имеет значение.

11 голосов
/ 27 октября 2012

Другая возможная причина:

В Rails 3.2.x establish_connection имеет аргумент по умолчанию, установленный из среды:

С connection_specification.rb :

def self.establish_connection(spec = ENV["DATABASE_URL"])
  resolver = ConnectionSpecification::Resolver.new spec, configurations
  spec = resolver.spec

Способ работы ConnectionSpecification::Resolver зависит от ENV['DATABASE_URL'], дающего nil, если не установлен. (Обычно это будет что-то вроде 'postgres://...').

Итак, если вы случайно настроили DATABASE_URL так, что ENV['DATABASE_URL'] == '', это даст вам database configuration does not specify adapter.

7 голосов
/ 12 апреля 2012

У меня была эта ошибка, когда я по ошибке запустил сервер rails с

sudo rails s -e "Production" -p 80

и я должен был начать рельсы с

sudo rails s -e "production" -p 80

4 голосов
/ 17 марта 2014

Для меня эта команда решила проблему.

rake db: перенести RAILS_ENV = production

4 голосов
/ 17 июня 2011

Я обнаружил еще одну вещь, которая может вызвать эту проблему: «смешивание» другого узла YAML с использованием & и *.

Первоначально я делал что-то вроде следующего, чтобы упростить локальные, настраиваемые, игнорируемые Git конфигурационные файлы:

http://blog.lathi.net/articles/2006/03/02/config-database-yml-goodness-for-teams

Но, после некоторой отладки, я обнаружил, что establish_connection по какой-то причине вызывался только со смешанными парами ключ-значение, а не с основными. То есть adapter, host и database не были переданы. Я понятия не имею, почему, и это работало на меня.

Так или иначе, вместо того, чтобы смешивать в другом узле YAML, я теперь помещаю все хеши development и test в локальный файл конфигурации, и establish_connection снова вызывается правильно.

3 голосов
/ 20 февраля 2014

Я получил ту же ошибку, набрав следующую команду:

db:migrate RAILS_ENV=product

Должно было быть:

db:migrate RAILS_ENV=production
3 голосов
/ 05 января 2009

Я нашел пару подсказок, что это может быть связано со старыми версиями библиотеки (ActiveRecord) или gem. Например, проблемы с осветителями, даже если с остальным приложением все в порядке (после обновления) или этот trac ticket , который "не дает драгоценным камням требовать адаптер из старого камня Active Record" , Хотя оба они старые, но, возможно, стоит убедиться, что ваши драгоценные камни обновлены (если это возможно).

Вы случайно используете адаптер MySQL для rails? Сейчас это устарело под рельсами, но вполне возможно, что оно все еще хромает.

Я тоже очень быстро взглянул на connection_specification.rb, откуда и возникает эта ошибка, и я думаю, что переподключение не удается ... но почему (поскольку это было очевидно, когда вы первым запустил приложение)? Вы делаете что-то дикое, например, вызываете ActiveRecord::Base.establish_connection в контроллере своего приложения (или в другом месте)?

Или, может быть, что-то вроде: скрипт запускается из cron в глубокой ночи, когда соединение обрывается. К сожалению, бегун вызывается с неправильным RAILS_ENV. Таким образом, неправильная строфа читается из database.yml, и эта строфа содержит неверный adapter:?

2 голосов
/ 24 февраля 2014

Помните, что RAILS_ENV = staging будет искать спецификацию размещения в вашем database.yml так же, как установка RAILS_ENV = production будет искать производственную спецификацию в файле database.yml.

Предоставьте конфиги базы данных, как показано ниже, для каждой среды rails, на которую вы ориентируетесь, например

bundle exec cap staging deploy

production:
  adapter: mysql2
  encoding: utf8
  database: rails
  username: rails
  password: pass
  host: 127.0.0.1
  port: 3306
  pool: 5
  timeout: 5000

staging:
  adapter: mysql2
  encoding: utf8
  database: rails
  username: rails
  password: pass
  host: 127.0.0.1
  port: 3306
  pool: 5
  timeout: 5000
2 голосов
/ 04 февраля 2014

Если вы получили эту ошибку при развертывании с Capistrano. Убедитесь, что вы устанавливаете правильный RAILS_ENV через

set :rails_env, 'production'

Например, я не устанавливал явно среду Rails для конфигурации промежуточного развертывания Capistrano. И поэтому Capistrano использовал 'staging' в качестве RAILS_ENV, что привело к указанной выше ошибке. Установка его в производство, как описано выше в файле staging.rb, решила проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...