2013-07-18 53 views
2

我得到一個「通過SCP上傳失敗」的錯誤,當我運行cap deploy,具有以下的輸出:Capistrano的:通過scp上傳失敗

* executing `deploy:assets:update_asset_mtimes' 
... 
** Updating mtimes for ~8 assets... 
** scp upload #<StringIO:0x007fca13a94f40> -> /apps/my_app/TOUCH_ASSETS 
*** upload via scp failed on <ip>: 
*** (
***) 
*** [deploy:update_code] rolling back 

當我跑cap deploy:cold,沒有任何錯誤。

這個錯誤的來源是什麼?我該如何去調試它?

回答

0

在您的Capistrano部署文件中,您將StringIO傳遞給scp命令而不是文件名。如果有問題的StringIO對象包含您要複製的文件(S)的名稱,則必須在StringIO的轉換爲字符串:

stringIOobject.read() 
+0

奇怪的是,scp命令甚至沒有在我的deploy.rb顯示... – user456584

+0

你使用'put'或'upload'命令?如果是這樣,請粘貼您的代碼,以便我們可以查看。 –

+0

似乎在Capistrano本身的這條線上窒息:https://github.com/capistrano/capistrano/blob/master/lib/capistrano/recipes/deploy/assets.rb#L95 – user456584

0

這可能是因爲你的資產清單文件格式不正確,如有錯字。查看項目中的以下清單文件並仔細檢查一切。

app/assets/javascripts/application.js 
app/assets/stylesheets/application.css 

如果您有任何其他自定義清單文件一定要檢查出來。 Look at the examples here以確保格式正確。

+0

嗯...沒有觸及這些文件,因爲它是一個只有「Post」腳手架的初學者應用程序。 – user456584

0

嘗試本地編譯你的資產,然後通過rsync上傳,這樣

namespace :deploy do 
    namespace :assets do 
    desc "Precompile assets on local machine and upload them to the server." 
    task :precompile, roles: :web, except: {no_release: true} do 
     run_locally "bundle exec rake assets:precompile" 
     find_servers_for_task(current_task).each do |server| 
     run_locally "rsync -vr --exclude='.DS_Store' public/assets #{user}@#{server.host}:#{shared_path}/" 
     end 
    end 
    end 
end