2014-09-03 37 views
2

在Capistrano的3個文檔(http://capistranorb.com/documentation/advanced-features/remote-file/)提供了一個例子來說明如何這個任務(remote_file)的作品remote_file Capistrano的3方法

namespace :deploy do 
    namespace :check do 
     task :linked_files => 'config/newrelic.yml' 
    end 
end 

remote_file 'config/newrelic.yml' => '/tmp/newrelic.yml', roles: :app 

file '/tmp/newrelic.yml' do |t| 
    sh "curl -o #{t.name} https://rpm.newrelic.com/accounts/xx/newrelic.yml" 
end 

他們告訴它允許遠程文件的存在被設定爲先決條件。 Hovewer我仍然無法知道它是如何工作的,因爲remote_file在任務代碼之外調用。它實際上做了什麼?有人可以解釋嗎?

如果config/newrelic.yml不存在,會發生什麼情況,以及如何將remote_file調用與 進行連接:linked_files任務?

回答

1

只調用remote_file定義一個名爲'config/newrelic.yml'的任務。它不執行那個任務。該生產線

remote_file 'config/newrelic.yml' => '/tmp/newrelic.yml', roles: :app 

時說:「創建一個名爲‘配置/ newrelic.yml’有名爲‘/tmp/newrelic.yml’的先決條件任務的任務」。 file '/tmp/newrelic.yml'部分定義了這個必備任務。最後,task :linked_files => 'config/newrelic.yml'指定了要執行的名爲'config/newrelic.yml'的先決任務,我們使用remote_file方法定義了該任務。

+0

除了爲什麼給定任務名稱/tmp/newrelic.yml並且看起來像文件路徑之外,它似乎很明顯嗎?給定文件的內容是否包含任務代碼? – antiplayer 2015-02-18 10:52:33

+0

您需要閱讀rake文件任務,這是remote_file使用的任務。文件任務是特殊的,因爲他們希望命名文件的路徑來工作。這是一個很好的博客文章解釋它http://madewithenvy.com/ecosystem/articles/2013/rake-file-tasks/ – davekaro 2015-02-25 17:02:00

+0

Thanx澄清! – antiplayer 2015-03-03 20:58:40