2

运行时出现“通过 scp 上传失败”错误cap deploy,输出如下:

  * 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时,没有错误。

这个错误的根源是什么,我该如何调试它?

4

3 回答 3

0

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

 stringIOobject.read()
于 2013-07-18T17:04:27.827 回答
0

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

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

如果您有任何其他自定义清单文件,请务必检查它们。 查看此处的示例以确保格式正确。

于 2013-07-18T17:40:30.883 回答
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
于 2013-07-30T14:18:30.277 回答