3

capistranoの展開に関していくつかの基本的な問題があります。まずgit clone、gitリポジトリがすでに存在する場合、capistranoが2番目と3番目のどちらでも使用しているかどうかを知る必要があります。使用しても問題ありませgit pullんか?set :deploy_via, :remote_cachecapfileに追加しました。サーバー固有のファイルであるため、gitリポジトリではなく、サーバーのパスに新しいファイルを追加しようとしたため、これを求めています。次にcapistranoを使用してデプロイしたときに、ファイルが消えました。git clonegitリポジトリがすでに作成されている場合でも、capistranoが使用しているようです。capistranogit pullがコードの更新に使用できないのはなぜですか?

4

1 に答える 1

6

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
于 2012-07-28T06:55:51.937 に答える