私は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. 特定のロールのみのCapistranoタスクを実行しています
- 4. クライアントの入力に基づいて、サーバーはどのように異なるタスクを実行しますか?
- 5. 異なるユーザーと異なるタスクを実行します
- 6. 入力に基づいて異なるラムダを実行する
- 7. URLに基づいて異なるMySQLクエリを実行する
- 8. Capistranoタスクにアクションを追加する
- 9. Outlookで自動的に実行するタスクを作成する
- 10. 変数に基づいてロールを実行しています
- 11. 単一のタスクを実行する複数のロール
- 12. カテゴリに基づいてタスクを表示するTodoアプリケーション
- 13. 異なるポートを使用して1つのホストの同じタスク定義に基づいて複数のECSタスクを実行
- 14. 異なるコマンドで2つのタスクを実行する方法
- 15. 異なるルート経由で同じSSISタスクを実行する
- 16. 可能:タスク/ハンドラを実行する前に別のタスク/ハンドラを実行する
- 17. Rは異なるスレッド/タスクで異なる関数を実行するR
- 18. 他のすべてのタスクより先に実行するタスクを作成する
- 19. 並行してタスクを実行する
- 20. CELERY_ROUTES - タスク名に基づいてルーティングする方法
- 21. そのタスクをインポートできないときにCeleryタスクを実行する
- 22. 実行し続ける別のタスクの後にタスクを実行する
- 23. gradleでタスクを実行した後に統合タスクを実行するには?
- 24. capistrano 3.5実行タスクどのように非ゼロ結果をキャッチ
- 25. Mavenを使用して異なるプロファイルのタスクを実行する方法
- 26. ボタンに基づいて異なるアニメーションを実行する角度をクリック
- 27. ロールベースのセキュリティJsonwebtokenに基づいて、Springブートで異なるコントローラに異なるロールを使用する
- 28. 異なるパラメータに基づいて異なるクラスの異なるオブジェクトを作成する方法は?
- 29. 別々の出力を作成するために異なる基準に基づいて異なる分割を実行します
- 30. Capistranoはロールに基づいて変数を設定できますか?
これは私にとってはうまくいかず、3つのタスクがすべて実行されます。 – aceofspades
私のために働かなかった。すべてのタスクが実行されます。 –
ここでは動作しません – Fluffy