дБ: семена не загружают модели - PullRequest
6 голосов
/ 05 февраля 2010

Я пытаюсь заполнить свою базу данных стандартным методом db/seeds.rb. Это прекрасно работает на моей машине разработки, но на моем сервере я получаю:

$ sudo rake db:seed RAILS_ENV=production --trace
** Invoke db:seed (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute db:seed
rake aborted!
uninitialized constant Permission
/usr/local/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2503:in `const_missing'
/usr/local/lib/ruby/gems/1.8/gems/activesupport-2.3.4/lib/active_support/dependencies.rb:92:in `const_missing'
/path/.../.../.../.../db/seeds.rb:4
/usr/local/lib/ruby/gems/1.8/gems/rails-2.3.4/lib/tasks/databases.rake:215:in `load'
/usr/local/lib/ruby/gems/1.8/gems/rails-2.3.4/lib/tasks/databases.rake:215
/usr/local/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:636:in `call'
...

Но когда я проверяю в консоли, модель существует:

$ script/console production
Loading production environment (Rails 2.3.4)
>> Permission
=> Permission(id: integer, ..., created_at: datetime, updated_at: datetime)

Что я забыл?

Ответы [ 3 ]

10 голосов
/ 12 мая 2011

В комментарии к блогу, размещенному по ссылке выше, и здесь снова: http://www.builtfromsource.com/2011/02/09/getting-rake-dbseed-and-config-threadsafe-to-play-nice/

Брюс Адамс упоминает, что можно позвонить:

config.threadsafe! если только $ rails_rake_task

чтобы включить потокобезопасность, только когда не запускается задача rake.

Но так как проблема в том, что threadsafe отключает зависимую_загрузку, вы можете просто добавить эту строку после config.threadsafe! оставить его включенным, но при этом все равно загружать среду, как вы ожидаете.

config.dependency_loading = true, если $ rails_rake_task

6 голосов
/ 07 марта 2010

Это можно исправить, отключив threadsafe! в конфигурации среды.

2 голосов
/ 01 апреля 2011

Я только что наткнулся на хороший подход к этой проблеме в этой статье . Я подведу итоги, чтобы люди могли (надеюсь) найти его быстрее.

Идея состоит в том, чтобы отключить потокобезопасность в производственной среде, сначала отредактировав config / environment / production.rb:

config.threadsafe! unless ENV['THREADSAFE'] == 'off'

Затем вы устанавливаете THREADSAFE = off при запуске граблей.

...