Я столкнулся с этой проблемой и в проекте Rails 3.1. Сухой YML (как рекомендовано многими руководствами), который был бы отлично проанализирован до Rails 3.1, больше не действителен. Rails 3.1 переключил парсеры yml, например, с 'syck' на 'psych'.
Одним из последствий этого изменения - возможно, неизвестного изменения в Rails 3.1 - проверки базы данных database.yml - является то, что каноническая конфигурация рельсов DRY, которую использовал Эрик М., вызывает ошибку «Отсутствует аргумент: база данных», поскольку Настройка рассматривается как среда рельсов, и как таковая она не проходит проверку, поскольку она не содержит значения для базы данных. Вы можете вызвать ту же ошибку, создав любую произвольную среду, оставив поле базы данных и вуаля, проблемы с запуском rake db: version или любых чувствительных к базе данных команд.
Существует несколько возможных обходных путей (в порядке моих предпочтений):
- Очистите раздел настройки и используйте вашу среду разработки как
модель для подстановки переменных, переопределяя поля, которые
отличается для испытаний и производства. С этой настройкой у вас есть только
рельсы среды ожидают, они все проверяют должным образом под нагрузкой
с граблями, и вы все еще получаете довольно сухой настройки.
https://gist.github.com/1242642
- Добавление фиктивной ссылки на базу данных к общим ссылкам
существующая база данных https://gist.github.com/1242623, которая получит
переопределяется любой конкретной базой данных: настройка в других ваших профилях.
Это сделает «настройку» допустимой средой, хотя и следующей
явно используется.
- Вернуть Rails 3.1 к старому механизму синтаксического анализа YAML. Я не проверял это, но некоторые записи в блоге утверждают, что это работает, хотя, конечно, неприятный побочный эффект заключается в том, что вы заставили Rails использовать более старый движок, который был отброшен, вероятно, по каким-то веским причинам. См., Например, Блог Batcode с ошибкой Rails 3.1 и обходной путь . Рекомендуемый шаг - установить
YAML::ENGINE.yamler = "syck"
в верхней части вашего application.rb. Возможно, вам сначала потребуется require 'yaml'
.
Я использую первое решение в своем приложении на Rails 3.1 без проблем. Спасибо Эрику М. за поднятие этой проблемы (не уверен, что у вас было приложение на Rails 3.1 или просто несколько текстовых гремлинов, поскольку изменение порядка работало для вас, но не для меня).