В конфигурации базы данных не указан адаптер

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

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

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

Ответ 1

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

  • Существует только производственная среда.
  • Я пропустил установку RAILS_ENV для командной строки.

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

$RAILS_ENV = production my_script

Ответ 2

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

Я изначально имел это:

production:
  adapter:mysql

Когда я имел в виду это:

production:
  adapter: mysql

Это небольшое пространство между адаптером и mysql делает разницу.

Ответ 3

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

В 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.

Ответ 4

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

sudo rails s -e "Производство" -p 80

и я должен был запустить рельсы с помощью

sudo rails s -e "production" -p 80

Ответ 5

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

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

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

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

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

Ответ 6

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

rake db: migrate RAILS_ENV = production

Ответ 7

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

Используете ли вы собственный адаптер на основе rails MySQL? Это теперь устарело под рельсами, но возможно, что он все еще хромает.

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

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

Ответ 8

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

db:migrate RAILS_ENV=product

Должно быть:

db:migrate RAILS_ENV=production

Ответ 9

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

set :rails_env, 'production'

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

Ответ 10

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

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

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

Ответ 11

Не забудьте использовать рубиновый камень на основе C для mysql. Основанный на рубине нестабилен для производства.

Попробуйте установить драгоценный камень

gem install mysql

Не забудьте скопировать libmySQL.dll в каталог ruby ​​bin.

Ответ 12

У меня была эта ошибка с другой проблемой; Я дважды указывал "развитие", а "тест" - не на всех.

Ответ 13

В Интернете есть много плохих учебных пособий, которые показывают файлы yaml следующим образом:

development:
encoding: utf
database: dbname
...etc

Файлы YAML чувствительны к регистру и требуют TWO SPACES для внутреннего содержимого каждого заданного атрибута типа db. Например:

development:
  encoding: utf
  database: dbname
  ...etc

UPDATE: я получил эту ошибку снова сегодня. Мой сервер VPS установил Rails 3.2.8, когда мое приложение запускало Rails 3.2.6.

Определенно проверьте свой Gemfile и ваш файл database.yml(конечно). Проблема здесь четко указана --- Rails не связывается с вашей базой данных специально из-за адаптера (aka gem)

Ответ 14

У нас была эта проблема с одним из наших старых приложений. Кто-то создал бутик с именем environment, что даже если RAIL_ENV был настроен на производство, он искал конфигурацию базы данных под названием legacy_<RAIL_ENV>, поэтому мне пришлось создать среду базы данных под названием legacy_production для этого приложения.

Если вы поддерживаете другое приложение, я бы поискал копию этого приложения database.yml, которое работает, возможно, оно имеет некоторую странную конфигурацию. Вы можете найти свою кодовую базу для establish_connection, чтобы определить, является ли она определением какого-то странного варианта.

Ответ 15

Я встретил эту проблему из-за проблемы с множественной поддержкой базы данных. В моей папке app/model существует файл с избыточным подключением к базе данных:

class CacheCleanerActiveRecord < ActiveRecord::Base
  establish_connection "cache_cleaner_#{Rails.env}"
  self.abstract_class = true
end

но эта база данных не найдена в моей базе данных .yml(потому что она вообще не используется).

поэтому решение остается простым: удалите этот файл, и все в порядке!

Ответ 16

У вас может быть ошибка, например:

RAILS_ENV= test

Пространство после того, как знак равенства не разрешен, измените его на:

RAILS_ENV=test

Ответ 17

rails -e "production" в порядке

только rails -e production возвращает ошибку

database configuration does not specify adapter (ActiveRecord::AdapterNotSpecified)

Ответ 18

вызов rake assets:precompile:all

Ответ 19

Вероятно, это не самая вероятная проблема, вызывающая эту ошибку, но здесь это на всякий случай.

Моя проблема заключалась в том, что я строю настройки базы данных в Hash, используя символы в качестве ключей, а затем сериализую ее с #to_yaml до database.yaml. ActiveRecord ожидает, что имена окружения будут Strings, а не Symbols, поэтому при чтении сгенерированного файла он не собирал настройки базы данных. Я исправил его, используя строковые ключи в хеше.

Ответ 20

Для Rails4, комментируя строку fetch(:default_env).merge!(rails_env: 'production') в production.rb и добавляя set :rails_env, :production, исправил ее.

Ответ 21

Вам нужно указать среду при запуске сервера или команды, так как файл database.yml может иметь только производственный адаптер, а просто runnig rake db: migrate, например, будет принимать переменную окружения в качестве разработки.

Ответ 22

Это происходит со мной, в конце концов я обнаружил, что RAILS_ENV чувствителен к регистру, в моем окружении, которое я установил RAILS_ENV=DEVELOPMENT, что неверно, значение RAILS_ENV должно быть строчным.

$ RAILS_ENV=DEVELOPMENT rails server webrick
=> Booting WEBrick
=> Rails 4.2.5 application starting in DEVELOPMENT on http://localhost:3000
=> Run `rails server -h` for more startup options
=> Ctrl-C to shutdown server
config.eager_load is set to nil. Please update your config/environments/*.rb files accordingly:

  * development - set it to false
  * test - set it to false (unless you use a tool that preloads your test environment)
  * production - set it to true

Exiting
/home/fangxing/.rvm/gems/ruby-2.3.0/gems/activerecord-4.2.5/lib/active_record/connection_adapters/connection_specification.rb:248:in `resolve_symbol_c
onnection': 'DEVELOPMENT' database is not configured. Available: ["default", "development", "test", "production"] (ActiveRecord::AdapterNotSpecified)
        from /home/fangxing/.rvm/gems/ruby-2.3.0/gems/activerecord-4.2.5/lib/active_record/connection_adapters/connection_specification.rb:211:in `res
olve_connection'



$ RAILS_ENV=development rails server webrick
RubyDep: WARNING: Your Ruby is outdated/buggy. (To disable warnings, set RUBY_DEP_GEM_SILENCE_WARNINGS=1)
RubyDep: WARNING: Your Ruby is: 2.3.0 (buggy). Recommendation: install 2.3.1.
=> Booting WEBrick
=> Rails 4.2.5 application starting in development on http://localhost:3000
=> Run `rails server -h` for more startup options
=> Ctrl-C to shutdown server
[2016-07-20 16:41:09] INFO  WEBrick 1.3.1
[2016-07-20 16:41:09] INFO  ruby 2.3.0 (2015-12-25) [x86_64-linux]
[2016-07-20 16:41:09] INFO  WEBrick::HTTPServer#start: pid=19881 port=3000

Ответ 23

Просто для полноты, я только что получил эту ошибку, потому что я изначально создал параметризованный Rails-бегун script, который берет адрес электронной почты, и назвал вариант командной строки -e - который, конечно, является тем, Rails runner использует для среды. Поэтому он пытался найти конфигурацию среды, которая соответствовала адресу электронной почты!

К счастью, перед ошибкой ActiveRecord, упомянутой в заголовке, это дало мне сообщение об ошибке, которое помогло мне объяснить, что на самом деле проблема:

You did not specify how you would like Rails to report deprecation notices for your [email protected] environment, please set config.active_support.deprecation to :log, :notify or :stderr at config/environments/[email protected]