从其他宝石分组rake任务

时间:2015-03-18 13:09:34

标签: rake

为了避免在我想重新初始化项目时触发许多rake任务,我在lib/task/twiddle.rake中创建了以下任务:

task :twiddle => %w(db:drop db:create railties:install:migrations db:migrate db:seed spree_sample:load)

从命令行触发这些命令的每一个都有效。 但是,rake twiddle运行spree_sample:load时会挂起NoMethodError: undefined method `slug' for #<Spree::Product:0x0000000ec9b9f0> 并出现以下错误:

{{1}}

有人可以解释为什么运行一组特定任务会在CLI上运行而不是通过rake任务吗?我需要一些图书馆吗?

1 个答案:

答案 0 :(得分:3)

实际上答案相对简单--Rails仅在引导时从数据库加载架构信息。 (您可以执行类似reset_schema_information的操作以强制重新加载)

你通常不会做db:migrate后跟db:seed,因为Rails不会在迁移和种子之间重新加载应用程序。因此,当db:seed运行时,它将没有表信息。这就是为什么你看到不同的结果,如果你单独运行它们 - 单独运行它们的行为使Rails重新加载自己并修复了尝试工作的catch-22与仅由前一个命令提供的模式。

还有栏杆:安装:迁移对你的任务毫无意义 - 你只是自己作为开发人员一次运行它,它会创建几个迁移文件(你签到git),然后这些文件存在你的应用永远。您不会重新运行railties:定期安装:迁移,因为您已经创建了这些迁移文件。 (当你升级狂欢时,你会重新运行它,但这是另一回事)