Capistrano:通过scp上传失败

时间:2013-07-18 16:55:28

标签: ruby-on-rails deployment capistrano ruby-on-rails-4

当我运行cap deploy时,我收到“通过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时,没有错误。

此错误的来源是什么?如何进行调试?

3 个答案:

答案 0 :(得分:0)

在Capistrano部署文件中,您将StringIO传递给scp命令而不是文件名。如果有问题的StringIO对象包含您要复制的文件的名称,则必须将StringIO转换为字符串:

 stringIOobject.read()

答案 1 :(得分:0)

可能是您的资产清单文件格式不正确,例如输入错误。查看项目中的以下清单文件,并仔细检查所有内容。

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

如果您有任何其他自定义清单文件,请务必检查它们。 Look at the examples here以确保格式正确。

答案 2 :(得分: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