2

Capistrano を使用して Rails アプリをサーバーにデプロイすることを検討しています。現在、私はすべての作業を行うスクリプトを使用しています。しかし、Capistrano はかなり良さそうなので、試してみたいと思います。

私の最初の問題/質問は次のとおりです: オープンソース プロジェクトで Capistrano を適切に使用する方法は? いくつかの理由から、自分の deploy.rb を公開したくありません:

  1. 私のサーバーに関する賢明な情報が含まれています。私はそれらを公開したくありません:)
  2. MY サーバーの構成が含まれています。そのオープンソース プロジェクトを自分のサーバーに展開する他の人にとっては、構成が異なる場合があります。したがって、他の人にとっては役に立たないため、私の構成を公開することはまったく無意味です。

2 番目の問題/質問: さまざまな環境をどのように管理すればよいですか? 背景: 私のサーバーでは、アプリケーション用に 2 つの異なる環境を提供しています。現在の安定版リリース ブランチを使用し、www.domain.com にある安定したシステムです。そして、master ブランチを実行している dev.domain.com の下の開発チームのための統合環境。

カピストラーノに安定システムまたは開発システムをデプロイするように指示するにはどうすればよいですか?

4

1 に答える 1

3

Capistrano で機密情報 (パスワードなど) を処理する方法は、一般的な処理方法と同じAPP_CONFIGです。バージョン管理にチェックインされていない YAML ファイルから取得したハッシュを使用します。これは、RailsCast #226などでカバーされている古典的な手法です。または、この StackOverflow questionを参照してください。

Capistrano でこのアプローチを使用する場合、少し異なる方法で行う必要があることがいくつかあります。

  1. 通常APP_CONFIGはあなたからロードされますconfig/application.rb(そのため、他の場所で使用できるように十分早く発生します)。ただし、Capistranocapタスクはそのファイルをロードしません。しかし、それをロードすることconfig/deploy.rbもできます。config/deploy.rbこれは、ユーザー名/パスワードを必要とする HTTP リポジトリを使用した不自然なファイルの先頭です。

    require 'bundler/capistrano'
    
    APP_CONFIG = YAML.load_file("config/app_config.yml")
    set :repo_user, APP_CONFIG['repo_user']
    set :repo_password, APP_CONFIG['repo_password']
    set :repository, "http://#{repo_user}:#{repo_password}@hostname/repositoryname.git/"
    set :scm, :git
    # ...
    
  2. config/app_config.ymlファイルはバージョン管理にチェックインされていません(そのパスをあなたのまたは類似のものに入れます).gitignore。私は通常、config/app_config.yml.sample構成する必要があるパラメーターを示す をチェックインします。

    repo_user: 'usernamehere'
    repo_password: 'passwordhere'
    
  3. アプリケーションにを使用している場合APP_CONFIG、デプロイ ホストごとに異なる値が必要になる可能性があります。そのため、Capistrano のセットアップで、shared/チェックアウト後にディレクトリから各リリースへのシンボリック リンクを作成します。移行の適用にはデータベースのパスワードが必要になる場合があるため、デプロイ プロセスの早い段階でこれを行う必要があります。したがって、これをconfig/deploy.rb入れてください:

    after 'deploy:update_code', 'deploy:symlink_app_config'
    namespace :deploy do
      desc "Symlinks the app_config.yml"
      task :symlink_app_config, :roles => [:web, :app, :db] do
        run "ln -nfs #{deploy_to}/shared/config/app_config.yml #{release_path}/config/app_config.yml"
      end
    end
    

さて、質問の 2 番目の部分 (複数のホストへのデプロイについて) では、ホストごとに個別の Capistrano "ステージ" を構成する必要があります。すべてのステージに共通するすべてのものをconfig/deploy.rbファイルに入れ、次に各ステージに固有のものすべてをconfig/deploy/[stagename].rbファイルに入れます。config/deploy.rbステージを定義するセクションがあります。

    # Capistrano settings
    require 'bundler/capistrano'
    require 'capistrano/ext/multistage'
    set :stages, %w(preproduction production)
    set :default_stage, 'preproduction'

(ステージの名前は自由に指定できます。Capistrano ステージ名は Rails 環境名とは別のものなので、ステージを「プロダクション」と呼ぶ必要はありません。) コマンドを使用するときは、ステージ名をとcapの間に挿入します。capターゲット名。:

    $ cap preproduction deploy   #deploys to the 'preproduction' environment
    $ cap production deploy      #deploys to the 'production' environment
    $ cap deploy                 #deploys to whatever you defined as the default
于 2013-10-30T21:42:59.830 に答える