Roc*_*ice 1 ruby-on-rails sidekiq
我正在尝试运行命令rake db:migrate使用sidekiq worker但似乎它不会工作,我很好奇是否有办法这样做或不.我正在使用sidekiq创建一个脚手架,但之后无法迁移它
这有效
class ScaffoldGeneratorWorker
include Sidekiq::Worker
def perform(id)
`rails g scaffold test_#{id} title:string body:text slug:string visible:boolean`
end
end
Run Code Online (Sandbox Code Playgroud)
但我不能让它在事后运行
class DatabaseMigrationWorker
include Sidekiq::Worker
def perform
`rake db:migrate`
end
end
Run Code Online (Sandbox Code Playgroud)
这是可能的,如果是这样,我怎样才能让它发挥作用.任何帮助是极大的赞赏.
首先你应该加载rake任务,然后调用:
class DatabaseMigrationWorker
include Sidekiq::Worker
def perform
Name_Of_Your_App::Application.load_tasks
Rake::Task['db:migrate'].invoke
end
end
Run Code Online (Sandbox Code Playgroud)
这段代码会自动为您的 Rails 应用程序加载 Rake 任务,而您甚至不知道您的应用程序是如何命名的(我就是这种情况)。它还使代码更容易在各种 Rails 项目之间共享。
class MySidekiqTask
include Sidekiq::Worker
def perform
application_name = Rails.application.class.parent_name
application = Object.const_get(application_name)
application::Application.load_tasks
Rake::Task['db:migrate'].invoke
end
end
Run Code Online (Sandbox Code Playgroud)
如果您需要使用参数调用 Rake 任务,您可以简单地通过invoke方法(https://www.rubydoc.info/gems/rake/Rake%2FTask:invoke)传递它们:
Rake::Task['db:migrate'].invoke(params)
| 归档时间: |
|
| 查看次数: |
1485 次 |
| 最近记录: |