簡體   English   中英

如何在Capistrano中“除非存在更高版本,否則進行復制”?

[英]How do I “copy unless later version exists” in Capistrano?

我想通過使其不受版本控制來保護我的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

您可以幫忙填寫第一個任務嗎?

我遇到了同樣的問題,但是處理方式卻有所不同。 也許會有所幫助。

設置任務會將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

我在安裝后但在第一次將它們部署到新機器上之前運行它們。 然后,在此之后的任何時候,當我需要更改數據庫參數時,我都會使用這些任務,而不是復制到新文件中。

我現在不存在適合您的代碼,但是..

您可以使用ruby本地時間戳。 文件類具有函數ctime,讓您知道它何時被更改。

在服務器數據庫上運行相同的命令。

如果本地的是最新的,則capistrano有一種安全上傳的方法

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM