80

コントローラーで rake タスクを実行したいと思います。これを行う方法はありますか?

4

4 に答える 4

64

私はddfreyneeに同意しますが、必要なものがわかっている場合、コードは次のようになります。

require 'rake'

Rake::Task.clear # necessary to avoid tasks being loaded several times in dev mode
Sample::Application.load_tasks # providing your application name is 'sample'

class RakeController < ApplicationController

  def run
    Rake::Task[params[:task]].reenable # in case you're going to invoke the same task second time.
    Rake::Task[params[:task]].invoke
  end

end

代わりに、初期化子で 'rake' と .load_tasks を要求できます。

于 2012-03-30T13:25:47.610 に答える
61

コードで rake タスクを呼び出すのは良いスタイルだとは思いません。実行したいタスクのコードを rake タスクの外に置き、rake タスクにこのコードを呼び出させることをお勧めします。

これには、rake の外部で簡単に呼び出すことができるという利点があるだけでなく (これは望ましいことです)、rake タスクのテストもはるかに簡単になります。

于 2009-07-23T07:49:17.037 に答える
16

コントローラーでこれを行うことができます:

%x[rake name_task]

with:name_taskはタスクの名前です

于 2011-08-19T14:37:20.200 に答える