当我运行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
时,没有错误。
此错误的来源是什么?如何进行调试?
答案 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