2010-09-23 48 views
5

我已经看到一些应用程序包含几个rake任务以加载数据。我不是在谈论种子数据,我知道db/seeds.rb,而是指的是像默认用户和基本记录这样的数据,这些数据可以帮助我填充应用程序的某些内容。我不想使用DB:灯具:负载,因为我没有在这个任何控制...Rake任务添加默认数据

我想有这样的rake任务:

rake myapp:data:delete 
rake myapp:data:load 
rake myapp:data:reload 

凡“删除'rake任务会删除我在rake任务中指定的所有数据,'load'应用程序会将任务中的默认数据加载到应用程序中,'reload'任务将删除所有数据,然后将其加载到应用程序中。我该如何做这样的事情?

如果你能给我一个例子,我有一个名为'联系'的模型和几个字段 - 基本上如何添加或删除耙子任务中的这些字段的数据,我真的很感激!

只是给你一个想法,当我从一台计算机移动到另一台计算机进行开发时,我主要使用这些rake任务。我不想手动去输入默认记录(如我的用户登录),所以我可以只是做耙myapp:data:reload - 这将是在做耙分贝后:架构:加载

谢谢,

BN

回答

7

创建一个文件的lib /任务/ data.rake和写下面的代码:

require File.join(File.dirname(__FILE__), '../../config/environment') 
require 'database_cleaner' 

namespace :myapp do 
    namespace :data do 

    task :delete do 
     DatabaseCleaner.strategy = :truncation 
     DatabaseCleaner.clean 
    end 

    task :load do 
     require 'db/data.rb' 
    end 

    task :reload do 
     Rake::Task['myapp:data:delete'].invoke 
     Rake::Task['myapp:data:load'].invoke 
    end 

    end 
end 

所以现在您已经定义了耙任务。我使用的宝石database_cleaner,所以你需要安装它:

sudo gem install database_cleaner 

现在,rake myapp:data:load基本上是从加载一个名为db/data.rb文件中的数据。只要你在rake任务中使用了文件名,或者如果你想要使用多个文件,你可以将它命名为任何你想要的名称...因此,创建文件db/data.rb,并将所需的所有代码放入...

User.create(...) 
+0

感谢您的及时回复!我完全按照你所说的做了,但由于某种原因,它没有找到db/data.rb文件。这是我得到的错误: – dingalingchickenwiing 2010-09-24 05:02:03

+0

rake中止! 没有这样的文件加载 - db/data.rb (查看完整跟踪通过运行任务与--trace) bash $ – dingalingchickenwiing 2010-09-24 05:02:53

+0

我试过了一切...它不会找到../db/data.rb ,../../db/data.rb或db/data.rb - 我没有运气。请帮忙。 :( – dingalingchickenwiing 2010-09-24 05:43:29