web-dev-qa-db-ja.com

Capistrano-ファイルを共有フォルダーに入れる方法

私はCapistranoが初めてで、共有フォルダーとオプション:linked_filesがあることを確認しました。共有フォルダーは、リリース間でファイルを保持するために使用されると思います。しかし、私の質問は、どのようにしてファイルが共有フォルダーにあるのでしょうか?

また、別のディレクトリを現在のディレクトリにシンボリックリンクしたい場合は、いくつかのパスの静的フォルダ、linked_dirsに配置するにはどうすればよいですか?

最後に、chmod 755をlinked_filesおよびlinked_dirsに設定する方法。

ありがとうございました。

45
Fajarmf

アプリ内のフォルダーは、共有ディレクトリ内のフォルダーへのシンボリックリンクです。アプリがlog/production.logに書き込む場合、実際には../shared/log/production.logに書き込みます。これが、ファイルが共有フォルダーに配置される方法です。

Capistranoの機能仕様またはテスト を見ると、これがどのように機能するかを確認できます。

これらの共有ファイルをchmodしたい場合、sshを介して1回だけ直接行うことができます。これらは、作成後にCapistranoによって変更されることはないからです。

リンクされたディレクトリを追加するには、deploy.rbで:

set :linked_dirs, %w{bin log tmp/backup tmp/pids tmp/cache tmp/sockets vendor/bundle}

または

set :linked_dirs, fetch(:linked_dirs) + %w{public/system}
61
Michael

Capistrano 3の設定ファイルを各サーバーの共有フォルダーにアップロードするタスクを作成しました。これらのディレクトリを順番に確認します。

  1. config/deploy/config /:stage/*。yml
  2. config/deploy/config/*。yml

そして、見つかったすべての設定ファイルをアップロードします。ファイルが変更された場合にのみファイルがアップロードされます。また、両方のディレクトリに同じファイルがある場合、2番目のディレクトリは無視されることに注意してください。

コードは次のとおりです。 https://Gist.github.com/Jesus/448d618c83fb0445ebbf

最後に、このタスクは設定をアップロードするだけです。ファイルをリモート共有フォルダに追加しますが、linked_files in config/deploy.rb、例:

set :linked_files, %w{config/database.yml config/aws.yml}

更新:

Gitを使用している場合は、これらのファイルを無視することをお勧めします。

echo "config/deploy/config/*" >> .gitignore
9
xuuso

カピストラーノ3.5+

Capistrano 3.5では、配列フィールドにappendが導入されました。 公式ドキュメントから 、これらを使用する必要があります:

共有ファイルの場合:

append :linked_files, %w{config/database.yml}

共有ディレクトリの場合:

append :linked_dirs, %w{bin log public/uploads vendor/bundle}
8
Sheharyar

連続したリリースで変更したくないファイルを置くために従うことができる3つの簡単なステップがあります。ファイルをlinked_filesリストに追加します。

set :linked_files, fetch(:linked_files, []).Push('config.php')

共有するすべてのファイルを選択します。 scpを介してこのファイルをローカルサーバーからリモートサーバーに配置します

scp config.php deployer@Amazon:~/capistrano/shared/config.php

次に、以下のコマンドを使用してデプロイします。

bundle exec cap staging deploy

もちろん、ステージングは要件ごとに変更できます。要件は製品、サンドボックスなどです。

もう1つ、チームメンバーにそのようなファイルをコミットさせたくないためです。したがって、このファイルを.gitignoreファイルに配置します。そして、それをgit remote repoにプッシュします。

4

Capistrano 3.5 +の場合、 official doc で指定されているとおり:

append :linked_dirs, ".bundle", "tmp"
2
Elodie

私にとっては上記のどれでも機能しなかったため、展開プロセスの最後に2つの機能を追加することになりました。

namespace :your_company do
    desc "remove index.php"
    task :rm_files do
        on roles(:all) do
                execute "rm -rf #{release_path}/index.php"
        end
    end
end

namespace :your_company do
    desc "add symlink to index.php"
    task :add_files do
        on roles(:all) do
                execute "ln -sf #{shared_path }/index.php #{release_path}/index.php"
        end
    end
end

after "deploy:finished", "your_company:rm_files"
after "deploy:finished", "your_company:add_files"
0
Shay Zalman