capistranoの展開に関していくつかの基本的な問題があります。まずgit clone
、gitリポジトリがすでに存在する場合、capistranoが2番目と3番目のどちらでも使用しているかどうかを知る必要があります。使用しても問題ありませgit pull
んか?set :deploy_via, :remote_cache
capfileに追加しました。サーバー固有のファイルであるため、gitリポジトリではなく、サーバーのパスに新しいファイルを追加しようとしたため、これを求めています。次にcapistranoを使用してデプロイしたときに、ファイルが消えました。git clone
gitリポジトリがすでに作成されている場合でも、capistranoが使用しているようです。capistranogit pull
がコードの更新に使用できないのはなぜですか?
1 に答える
Capistranoは、このようにリリースごとに新しいサブディレクトリを作成します。
horse:releases xxx$ ls -lart
total 0
drwxrwxr-x 22 xxx staff 748 Jun 26 20:08 20120626180809
drwxrwxr-x 22 xxx staff 748 Jun 26 20:11 20120626181103
drwxrwxr-x 22 xxx staff 748 Jun 26 20:29 20120626182908
drwxrwxr-x 22 xxx staff 748 Jun 26 20:34 20120626183442
drwxrwxr-x 22 xxx staff 748 Jun 26 20:35 20120626183525
drwxrwxr-x 8 xxx staff 272 Jun 27 13:11 .
drwxrwxr-x 22 xxx staff 748 Jun 27 13:11 20120627111102
drwxrwxr-x 5 xxx staff 170 Jun 27 13:11 ..
次に、このように現在のリリースへのシンボリックリンクを設定するだけです
horse:deployed xxx$ ls -lart
total 8
drwxrwxr-x 4 xxx staff 136 Jun 26 19:51 ..
drwxrwxr-x 7 xxx staff 238 Jun 26 20:22 shared
drwxrwxr-x 8 xxx staff 272 Jun 27 13:11 releases
lrwxrwxr-x 1 xxx staff 70 Jun 27 13:11 current -> /Users/xxx/RailsDeployment/server/deployed/releases/20120627111102
このように、シンボリックリンクを最後の(動作中の)デプロイメントに戻す必要があるため、サーバーでのデプロイメントのロールバックは非常に簡単ですが、gitpullの代わりにgitcloneを使用することが理にかなっているたびに、新しい完全なサブディレクトリが作成されます。
サーバー固有のファイルが必要な場合は、capistranoデプロイタスクをconfig / deploy.rbファイルに追加して、アプリディレクトリ外の別の場所(通常は共有サブフォルダー)からコピーする必要があります。これは、展開が完全に自動化され、自動化された手順で必要なすべての手順を文書化する必要があり、これがスノーフレークサーバーへの最初の手順であるため、手動で配置されたサーバー上のファイルに依存しないためです。したがって、通常は本番パスワードを含むファイルなど、gitリポジトリの一部ではないファイルが必要な場合は、config / deploy.rbを変更して、このファイルを必要な場所にコピーする必要があります。これを行う方法を確認するには、deploy.rbのcopy_db_credentialsタスクを確認してください。
namespace :deploy do
desc "cause Passenger to initiate a restart"
task :restart do
run "touch #{current_path}/tmp/restart.txt"
end
desc "Copies database credentials"
task :copy_db_credentials do
run "cp #{shared_path}/credentials/database.yml #{current_path}/config/database.yml"
end
desc "reload the database with seed data"
task :seed do
run "cd #{current_path}; rake db:seed RAILS_ENV=#{rails_env}"
end
end
after :deploy, "deploy:copy_db_credentials"
after "deploy:update_code", :bundle_install
desc "install the necessary prerequisites"
task :bundle_install, :roles => :app do
run "cd #{release_path} && bundle install"
end