私は1つのCapistranoタスクを呼び出す方法を探しています。カピストラノはこれを行うことができますか、あるいは私はそれぞれの役割について具体的な仕事を書いていますか?ロールに基づいて異なるタスクを実行するCapistranoタスクを作成する
答えて
カピストラーノでこれを行うための標準的な方法は:
task :whatever, :roles => [:x, :y, :z] do
x_tasks
y_tasks
z_tasks
end
task :x_tasks, :roles => :x do
#...
end
task :y_tasks, :roles => :y do
#...
end
task :z_tasks, :roles => :z do
#...
end
そうです、あなたは別のタスクを記述する必要がありますが、あなたは親タスクからそれらを呼び出すことができますし、それらが適切にフィルタリングします。
実際には:
% cat capfile
server 'localhost', :role2
task :task1, :roles=>:role1 do
puts 'task1'
end
task :task2 do
task1
end
% cap task2
* executing `task2'
* executing `task1'
task1
:ロールPARAMはコマンドなどを実行するためにさらに渡されますが、タスクが実際に発射されるかどうかに影響を与えていないようです。
申し訳ありませんが、私はここにそれを書いたのでコメントにコメントを入れる方法を見つけられませんでした。
方法があります。 Check:http://weblog.rubyonrails.org/2006/8/30/capistrano-1-1-9-beta/と表示され、ROLES環境変数を使用してデフォルトロールを上書きできることがわかります。
私はとして定義されたタスクがあります。:test
役割は、1台のサーバーに割り当てられている
desc "A simple test to show we can ssh into all servers"
task :echo_hello, :roles => :test do
run "echo 'hello, world!'"
end
を。コマンドラインで
、私は実行することができます。
[[email protected] bin]$ cap echo_hello ROLES=lots_of_servers
を、タスクは現在lots_of_serversの役割上で実行されます。
これは、ENV
ハッシュを更新することでルビスクリプト内で動作することを確認していませんが、これは良いスタートです。
あなたはまた、
task :foo do
run "command", :roles => :some_role
upload "source", "destination", :roles => :another_role
end
使用名前空間行うことができます。 https://github.com/leehambley/capistrano-handbook/blob/master/index.markdown#namespacing-tasks
namespace :backup do
task :default do
web
db
end
task :web, :roles => :web do
puts "Backing Up Web Server"
end
task :db, :roles => :db do
puts "Backing Up DB Server"
end
end
これらのタスクのみレコードの
backup:default
backup:web
backup:db
、このようキャップ-Tに表示しますCapistrano 3を使用したソリューションになる可能性があります。
desc "Do something specific for 3 different servers with 3 different roles"
task :do_something do
on roles(:api_role), in: :sequence do
# do something in api server
end
on roles(:app_role), in: :sequence do
# do something in application server
end
on roles(:another_role), in: :sequence do
# do something in another server
end
end
アプリケーションサーバに「do_something」タスクを実行するサーバの定義のようなものになります:
server 'application.your.domain', user: 'deploy', roles: %w{app_role}
次に、あなたは意志タスク(それを行うには、いくつかの方法があります)、タスクを呼び出すことができます"app_role"に従って特定の命令を実行します。
- 1. 特定のロールのみのCapistranoタスクを実行しています
- 2. クライアントの入力に基づいて、サーバーはどのように異なるタスクを実行しますか?
- 3. Outlookで自動的に実行するタスクを作成する
- 4. Capistranoタスクにアクションを追加する
- 5. 異なるコマンドで2つのタスクを実行する方法
- 6. 異なるルート経由で同じSSISタスクを実行する
- 7. 並行してタスクを実行する
- 8. CELERY_ROUTES - タスク名に基づいてルーティングする方法
- 9. そのタスクをインポートできないときにCeleryタスクを実行する
- 10. 別々の出力を作成するために異なる基準に基づいて異なる分割を実行します
- 11. Mavenを使用して異なるプロファイルのタスクを実行する方法
- 12. テンプレート変数タイプに基づいて異なるメソッドを実行する
- 13. Capistranoはロールに基づいて変数を設定できますか?
- 14. iOS - タスクをスケジュールする - 実行していない状態
- 15. ユーザー入力に基づいてdjango-celeryを使用してタスクをスケジュールする
- 16. executorService.scheduleAtFixedRate永久にタスクを実行する
- 17. mavenタスクを最初に実行する
- 18. は、私は物事の下に実行するGradleのタスクを作成したいのGradleタスク
- 19. タスクをキャンセルするか、タスクの実行を即座に終了するには?
- 20. セロリのタスクを確実にする方法セロリのタスクの実行が重複しないようにする
- 21. ファイル名に基づいて名前付きフォルダを動的に作成するgulpタスク
- 22. カスタムAntタスクを作成するには?
- 23. スレッドプール:実行中のタスクから子タスクを生成する方法は?
- 24. Capistranoのタスクに関する詳細情報を取得する
- 25. スケジュールされたタスクを作成したユーザーと異なるユーザーで実行する
- 26. UIをフリーズしないで長いタスクを実行する
- 27. 別のカスタムMSBuildタスクを使用するカスタムMSBuildタスクの作成
- 28. 各行の異なる宛先を処理するSSISタスク
- 29. Android - サービスでrepititveタスクを実行する
- 30. Antタスクからpngquantを実行する
これは私にとってはうまくいかず、3つのタスクがすべて実行されます。 – aceofspades
私のために働かなかった。すべてのタスクが実行されます。 –
ここでは動作しません – Fluffy