2013-07-18 51 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