2011-06-14 51 views
5

我使用cap調用了很多在一堆服務器上運行命令。我還想用capistrano將一個文件推送到一堆服務器上。如何將文件複製到一堆服務器與capistrano

起初我以爲PUT會這樣做,但是讓你創建文件的數據。我不想這樣做,我只是想將正在運行capistrano命令的機器中的現有文件複製到其他機器。

這將是冷靜,如果我可以做這樣的事情:

host1$ cap HOSTS=f1.foo.com,f2.foo.com,f3.foo.com COPY /tmp/bar.bin 

我希望它可以複製主機1:/tmp/bar.bin到f1.foo.com:/tmp/bar.bin和f2.foo.com:/tmp/bar.bin和f3.foo.com:/tmp/bar.bin

這種事情似乎非常有用,所以我肯定有一種方法可以做到這一點...

回答

10
upload(from, to, options={}, &block) 

上傳操作將文件存儲在所有服務器上的給定路徑當前任務的目標。

如果您之前曾使用deploy:upload任務,那麼您可能已經知道該方法是如何工作的。它需要您想要上傳的資源的路徑和遠程服務器上的目標路徑。

desc "Uploads CHANGELOG.txt to all remote servers." 
task :upload_changelog do 
    upload("#{RAILS_ROOT}/CHANGELOG.txt", "#{current_path}/public/CHANGELOG") 
end 

source

+7

NB。如果出現錯誤,例如「請指定至少一個文件或目錄更新」,則請調用'top.upload(...)'而不僅僅是'upload(...)'來消除歧義。 ref:http://www.mail-archive.com/[email protected]/msg04699.html – 2011-09-05 05:52:14

+1

如果您使用的是Rails 3,請記住使用'Rails.root'而不是'RAILS_ROOT'。 – Mika 2012-07-05 17:28:00

+4

使用'Rails.root'將不起作用,因爲在運行'cap'時Rails未加載。在這個例子中,你想使用'File.expand_path('../../ CHANGELOG.txt',__FILE __)'。 – 2013-01-18 03:59:57

1

這上傳到各個服務器中的所有文件。

帽部署:上傳文件= ABC,DEF

0

顯示所有任務:

cap -T 
cap deploy    # Deploys your project. 
cap deploy:check   # Test deployment dependencies. 
cap deploy:cleanup  # Clean up old releases. 
cap deploy:cold   # Deploys and starts a `cold'... 
cap deploy:create_symlink # Updates the symlink to the ... 
cap deploy:migrations  # Deploy and run pending migr... 
cap deploy:pending  # Displays the commits since ... 
cap deploy:pending:diff # Displays the `diff' since y... 
cap deploy:rollback  # Rolls back to a previous ve... 
cap deploy:rollback:code # Rolls back to the previousl... 
cap deploy:setup   # Prepares one or more server... 
cap deploy:symlink  # Deprecated API. 
cap deploy:update   # Copies your project and upd... 
cap deploy:update_code # Copies your project to the ... 
cap deploy:upload   # Copy files to the currently... 
cap deploy:web:disable # Present a maintenance page ... 
cap deploy:web:enable  # Makes the application web-a... 
cap integration   # Set the target stage to `in... 
cap invoke    # Invoke a single command on ... 
cap multistage:prepare # Stub out the staging config... 
cap production   # Set the target stage to `pr... 
cap shell     # Begin an interactive Capist... 

你可以使用:

cap deploy:upload 

參見: https://github.com/capistrano/capistrano/wiki/Capistrano-Tasks#deployupload

相關問題