我正在尝试使用sidekiq worker运行命令rake db:migrate但似乎它不起作用,我很好奇是否有办法做到这一点。我正在使用sidekiq创建一个脚手架,但之后无法迁移它
这有效
class ScaffoldGeneratorWorker
include Sidekiq::Worker
def perform(id)
`rails g scaffold test_#{id} title:string body:text slug:string visible:boolean`
end
end
但是我不能让它在事后运行
class DatabaseMigrationWorker
include Sidekiq::Worker
def perform
`rake db:migrate`
end
end
这是否可行,如果是这样,我怎样才能让它发挥作用。非常感谢任何帮助。
答案 0 :(得分:7)
首先你应该加载rake任务,然后调用:
class DatabaseMigrationWorker
include Sidekiq::Worker
def perform
Name_Of_Your_App::Application.load_tasks
Rake::Task['db:migrate'].invoke
end
end
答案 1 :(得分:2)
此代码自动为您的Rails应用程序加载Rake任务,而您甚至不知道应用程序的命名方式(我就是这种情况)。它还使代码更易于在各种Rails项目之间共享。
generateXML::dispatch($this->account)
->onQueue('generate-xml')
->delay(Carbon::now()->addSeconds(10));
答案 2 :(得分:0)
您是否尝试在文件顶部添加require 'rake'
?