7

トールタスクを実行するときに、特定のタスクを最初に呼び出すことはできますか?

私のトールファイル:

class Db < Thor

  desc "show_Version", "some description ..."
  def show_version # <= needs a database connection
    puts ActiveRecord::Migrator.current_version
  end

  private

  def connect_to_database # <= call this always when a task from this file is executed
    # connect here to database
  end

end

すべてのタスクで「connect_to_database」メソッドを記述できますが、それはあまり DRY ではないようです。

4

2 に答える 2

12

invoke他のタスクを実行するために使用できます。

def show_version
  invoke :connect_to_database
  # ...
end

これにより、それらが一度だけ実行されるようになります。それ以外の場合は、通常どおりメソッドを呼び出すことができます。

def show_version
  connect_to_database
  # ...
end

または、コンストラクターへの呼び出しを追加して、すべての呼び出しで最初に実行することもできます。

def initialize(*args)
  super
  connecto_to_database
end

への呼び出しsuperは非常に重要です。これがないと、Thor は何をすべきかわかりません。

于 2010-11-11T09:26:44.343 に答える
1

あまり文書化されていないトールの機能はメソッドdefault_taskです。トール スクリプト内からシンボルを渡すと、特定のタスクを実行するように設定し、invoke を使用して他のタスクを実行できます。

例えば:

default_task :connect_to_database
于 2011-02-23T15:25:15.663 に答える