0

database.ymlファイルをバージョン管理から外して保護したいと考えています。したがって、私の Capistrano デプロイ レシピには 2 つのタスクがあります。

task :copy_db_config do
  # copy local config file if it exists and is more
  # recent than the remote one
end

task :symlink_db_config do
  run "ln -nfs #{shared_path}/config/database.yml #{release_path}/config/database.yml"
end

最初のタスクを完了するのを手伝ってもらえますか?

4

2 に答える 2

0

私は今ここであなたのために機能するコードを持っていませんが..

rubyを使用してローカルタイムスタンプを作成できます。ファイルクラスには、いつ変更されたかを知らせる関数ctimeがあります。

サーバーdatabase.ymlで同じコマンドを実行します

ローカルのものが最新の場合、capistranoには安全なアップロードの方法があります

upload("products.txt", "/home/medined", :via => :scp)

于 2009-01-14T08:50:34.227 に答える
0

私は同じ問題を抱えていましたが、別の方法でアプローチしました。多分それは役立つでしょう。

setup タスクは、database.yml.example を database.yml にコピーします。deploy タスクは database.yml には触れません。データベース名、ユーザー名、およびパスワードを変更するための別のタスクがあります。次に例を示します。

desc "Change the database name"
task :change_db_database, :roles => :app do
  database = prompt('Enter new database name: ')
  run <<-CMD
    cd #{shared_path}/config &&
    perl -i -pe '$env = $1 if /^(\\w+)/; s/database:.*/database: #{database}/ if $env eq "#{ENV['CONNECTION'] || ENV['TARGET']}"' database.yml
  CMD
end

セットアップ後、新しいボックスに最初に展開する前にこれらを実行します。その後、データベース パラメータを変更する必要があるときはいつでも、新しいファイルにコピーする代わりにこれらのタスクを使用します。

于 2009-08-28T17:29:27.167 に答える