如何使用 sidekiq 运行 rake db:migrate
How to run rake db:migrate with sidekiq
我正在尝试 运行 使用 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
这可能吗?如果可以,我怎样才能让它工作。非常感谢任何帮助。
您尝试过在文件顶部添加 require 'rake'
吗?
How do I run rake tasks within my rails application
可能重复
首先你应该加载 rake 任务,然后调用:
class DatabaseMigrationWorker
include Sidekiq::Worker
def perform
Name_Of_Your_App::Application.load_tasks
Rake::Task['db:migrate'].invoke
end
end
此代码会自动为您的 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
如果需要带参数调用Rake任务,直接通过invoke
方法传入即可(https://www.rubydoc.info/gems/rake/Rake%2FTask:invoke):
Rake::Task['db:migrate'].invoke(params)
我正在尝试 运行 使用 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
这可能吗?如果可以,我怎样才能让它工作。非常感谢任何帮助。
您尝试过在文件顶部添加 require 'rake'
吗?
How do I run rake tasks within my rails application
可能重复首先你应该加载 rake 任务,然后调用:
class DatabaseMigrationWorker
include Sidekiq::Worker
def perform
Name_Of_Your_App::Application.load_tasks
Rake::Task['db:migrate'].invoke
end
end
此代码会自动为您的 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
如果需要带参数调用Rake任务,直接通过invoke
方法传入即可(https://www.rubydoc.info/gems/rake/Rake%2FTask:invoke):
Rake::Task['db:migrate'].invoke(params)