2

つまり、コンソールからCapistranoレシピのパラメーターを取得したいので、Googleを調べた後、次のことを思いつきました。

task :set_repo do
  set :repository,  "git@github.com:#{configuration[:repo]}/MyApp.git"
  set :scm_user,  configuration[:repo]
end

タスクを実行しようとすると、構成ハッシュの「メソッドがありません」というエラーが発生します。そして、Googleでもう一度検索した後、Capistranoから構成をロードする必要があることがわかったので、次のコードを追加しました。

configuration = Capistrano::Configuration.respond_to?(:instance) ?
  Capistrano::Configuration.instance(true) :
  Capistrano.configuration(:must_exist)

しかし、それは「Capistranoレシピ内からこのファイルを要求してください」というメッセージとともにLoadErrorをスローします。capistrano / configurationモジュールを要求しようとしましたが、同じエラーが発生し続けます。

どんな助けでも大歓迎です。

4

2 に答える 2

1

さて、私は構成をまったく使用せずに回避策を見つけました。

このように名前空間の外にいくつかのタスクを設定できるようです

desc "Use UserA's git repository"
task :usera do
  set :repository,  "git@github.com:UserA/MyApp.git"
  set :scm_user,  "UserA"
end

desc "Use UserB's git repository"
task :userb do
  set :repository,  "git@github.com:UserB/MyApp.git"
  set :scm_user,  "UserB"
end

これを行った後、コンソールでリポジトリタスクの前にデプロイタスクを呼び出すだけです。例えば:

$ cap usera deploy

したがって、これは最初にuseraタスクを呼び出し、次にデプロイタスクを呼び出します。

于 2012-06-26T13:52:50.813 に答える
0

コマンドラインから capistano 変数を設定できます。

たとえば、次の呼び出しでは、capistrano 変数scm_userが「userA」に設定され、capistrano 変数リポジトリが「http://myrepo.com/blah」に設定されます。

cap deploy -s scm_user="userA" -s repository="http://myrepo.com/blah"

これは置くのと同じ効果があります

set :scm_user, 'userA'
set :repository, 'http://myrepo.com/blah'

deploy.rb ファイルの先頭にあります。

于 2012-07-18T02:37:24.060 に答える