4

これはおそらく初心者のルビーの質問です。複数の異なるホストにデプロイする必要があるライブラリとアプリがいくつかあります。すべてのアプリとライブラリは、ホスト名、データベース サーバー/ユーザー/パスなど、これらのホストのいくつかの共通設定を共有します。

私の目標は、次のようなことをすることです:

cap host1 stage deploy
cap host2 stage deploy
cap host1 prod deploy
# ...

私の質問は、これらの共通設定をすべての deploy.rb ファイルにどのように含めるのですか? より具体的には、いくつかの共通設定といくつかのホスト固有のタスク定義を含む、含めることができる rb ファイルを作成したいと考えています。

set :use_sudo, false
# set some other options

task :host1 do
    role :app, "host1.example.com"
    role :web, "host1.example.com"
    role :db,  "host1.example.com", :primary => true

    set :rodb_host, "dbhost"
    set :rodb_user, "user"
    set :rodb_pass, "pass"
    set :rodb_name, "db"
 end

 task :host2 do
     #...
 end

deploy.task :carsala do
    transaction do
        setup
        update_code
        symlink
    end
end

そして、ステージ、製品などを定義するすべての deploy.rb ファイルにこのファイルを「含め」、必要に応じて「共通の」構成パラメーターを上書きします。任意の提案をいただければ幸いです。私はいくつかの異なることを試しましたが、それらすべてのキャップからエラーが発生します。

編集:私は試しました

require 'my_module'

しかし、未定義のタスク オブジェクトに関するエラーが表示されます。

4

4 に答える 4

9

もう少し試してみたところ、次のことが必要であることがわかりました。

load 'config/my_module'

すべての共通定義をここに配置して、それを deploy.rb にロードするだけです。

load がファイルをロードして実行するドキュメントから表示されます。または、指定されたライブラリのロード試行を要求します。実際の違いについては完全にはわかりませんが、現在のアプリのシンボル空間と必要なライブラリ (したがって、未定義のタスク オブジェクトに関するエラー) の間にはある程度の分離があるようです。ロード。

于 2008-10-30T21:37:10.360 に答える
2
require 'my_extension'

拡張機能を my_extension.rb に保存します

于 2008-10-30T16:03:21.017 に答える
0

Jon の言うとおりです。これが最も簡単な方法です。別のファイルに保存して、require 'filename'. Capistrano ' Recipes 'の形でこれをサポートするWebistranoのような派手なものを展開に使用することもできます。私はいくつかのプロジェクトでしばらくの間それを使用してきて、それを愛するようになりました.

于 2008-10-30T17:15:16.567 に答える
0

あなたのニーズがどれほど複雑かはわかりませんが、これは展開にはうまくいきます:

set :application, "app"

set :scm,           :subversion
# ... set all your common variables

task :staging do
  set :repository,    "http://app/repository/trunk/"
  # ... set other uncommon variables in task
end

task :production do
  set :repository,    "http://app/repository/production/"
  # ...
end

展開はただ

cap staging deploy

また

cap production deploy
于 2008-10-31T17:37:17.767 に答える