7

Railsサーバーが実行されているときに正しく効果的に機能するカスタムデータベースアダプターを作成しました。ここで、データベースを作成、削除、および移行するための通常のrakeタスク定義を追加したいと思います。

実装したい:

db:[drop|create|migrate]

これらの定義をgemと一緒にパッケージ化して、gemを使用するすべての人のデフォルトの定義をオーバーライドするにはどうすればよいですか?

他のアダプターのソースを調べましたが、すべてのrakeタスクロジックがactive_record自体に組み込まれているように見え、各タスクはアダプター名をオンにするだけです。

4

2 に答える 2

12

これは次の場合に可能です。

# somewhere in your gem's tasks
Rake::Task['db:create'].clear

# then re-define
namespace 'db' do
  task 'create' do
    # ...
  end
end

Take::Task#[]タスクを解決できない場合は解決しますfail。タスクが時々存在する場合は、次のことを行うことができます。

task_exists = Rake.application.tasks.any? { |t| t.name == 'db:create' }
Rake::Task['db:create'].clear if task_exists

既存のrakeタスクにタスクを追加する場合は、を使用しますenhance

Rake::Task['db:create'].enhance do
  Rake::Task['db:after_create'].invoke
end
于 2011-06-16T23:16:37.423 に答える
3

あなたは書ける

Rake::Task['db:create'].clear

再定義する前に元のタスクを削除します。Railsのデフォルトのレーキタスクのオーバーライドもチェックしてください

于 2014-04-04T20:21:00.420 に答える