为了避免在重新初始化项目时触发许多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>有人能解释为什么在CLI上运行一组特定的任务而不是通过rake任务运行吗?我需要一些图书馆吗?
发布于 2015-03-20 18:09:57
答案相对简单-- Rails只在启动时才从数据库加载模式信息。(您可以做一些类似reset_schema_information的操作来强制它重新加载)
通常您永远不会做db:migrate和db:seed后面的操作,因为Rails不会在迁移和种子之间重新加载应用程序。因此,当db:seed运行时,它将没有表信息。这就是为什么当您单独运行它们时会看到不同的结果--单独运行它们的行为会使Rails重新加载并修复捕获--22尝试使用仅由前面的命令可用的模式。
还有:安装:迁移在您的任务中没有意义--您只作为开发人员运行了1次,它创建了几个迁移文件(您签入到git),然后这些文件将永远驻留在您的应用程序中。因为您已经创建了那些迁移文件,所以您不需要定期重新运行railties:install:迁移。(升级狂潮时,您确实会重新运行它,但这是另一回事)
https://stackoverflow.com/questions/29122986
复制相似问题