0

我想database.yml通过使其不受版本控制来保护我的文件。因此,我的 Capistrano 部署方案中有两个任务:

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

I don't have functioning code for you here and now but..

you can the the local timestamp by using ruby. File class has a function ctime which let's You know when it was changed.

Run the same command on the servers database.yml

If the local one is newest, capistrano has a method for secure upload

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

于 2009-01-14T08:50:34.227 回答
0

我有同样的问题,但我的处理方式不同。也许会有所帮助。

设置任务将 database.yml.example 复制到 database.yml。部署任务不涉及 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 回答