2010-02-05 99 views
6

我试图用标准db/seeds.rb方法为我的数据库播种。这工作得很好我的开发机器上,但我的服务器上,我得到:db:种子没有加载模型

$ 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) 

什么我忘了?

+0

注意其我的生产服务器上运行开发环境的罚款。 – Eli 2010-02-06 20:43:33

+0

你的seeds.rb是怎样的? – 2010-02-10 11:33:40

+0

我修好了。我禁用了'threadsafe!'。 – Eli 2010-02-11 01:34:59

回答

6

可以通过在环境配置中禁用threadsafe!来解决该问题。

2

我刚刚跑过这个问题的好方法in this article。我会在这里总结一下,这样人们可以(希望)更快地找到它。

的想法是关闭线程安全的生产环境,首先通过编辑配置/环境/ production.rb:

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

然后,您可以运行rake任务时设置THREADSAFE =关闭。

10

到博客评论张贴链接到上面,并在这里再次:http://www.builtfromsource.com/2011/02/09/getting-rake-dbseed-and-config-threadsafe-to-play-nice/

布鲁斯·亚当斯提到了一个可以称之为:

config.threadsafe!除非$ rails_rake_task

只在未运行rake任务时才打开线程安全。

但是,由于问题确实是线程安全关闭了dependency_loading,所以您可以简单地在config.threadsafe之后添加此行!让它保持启用状态,但仍然按照您的预期加载您的环境。

config.dependency_loading = true如果$ rails_rake_task