如何使用sidekiq运行rake db:migrate

时间:2016-11-18 04:37:27

标签: ruby-on-rails 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

这是否可行,如果是这样,我怎样才能让它发挥作用。非常感谢任何帮助。

3 个答案:

答案 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'

How do I run rake tasks within my rails application

的可能副本