50

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

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

最後chmod 755にlinked_filesとlinked_dirsへの設定方法です。

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

4

6 に答える 6

65

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

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

これらの共有ファイルを chmod したい場合は、作成後に Capistrano によって変更されることはないため、ssh 経由で直接一度だけ実行できます。

リンクされたディレクトリを追加するには、次のようにします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}
于 2013-10-10T21:02:38.423 に答える
11

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

  1. config/deploy/config/:stage/*.yml
  2. 構成/デプロイ/構成/*.yml

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

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

最後にもう 1 つ、このタスクは設定をアップロードするだけです。ファイルをリモート共有フォルダーに追加する場合でも、次のように設定する必要がありlinked_filesますconfig/deploy.rb

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

アップデート:

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

echo "config/deploy/config/*" >> .gitignore
于 2014-05-07T14:36:15.340 に答える
4

連続したリリースで変更したくないファイルを配置するには、次の 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 にプッシュします。

于 2015-12-06T16:23:21.667 に答える
1

私にとっては上記のどれも機能しなかったため、展開プロセスの最後に 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"
于 2019-07-29T11:35:05.377 に答える