Ruby on rails Capistrano:通过scp上载失败

Ruby on rails Capistrano:通过scp上载失败,ruby-on-rails,deployment,capistrano,ruby-on-rails-4,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>:

运行
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
*执行“部署:资产:更新资产\u时间”
...
**正在更新约8个资产的MTIME。。。
**scp上传->/apps/my_app/TOUCH_资产
***在以下位置通过scp上载失败:
*** (
*** )
***[部署:更新\u代码]正在回滚
当我运行
cap deploy:cold
时,没有出现错误


此错误的来源是什么?我如何调试它?

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

 stringIOobject.read()

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

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

如果您有任何其他自定义清单文件,请确保也将其签出。确保格式正确。

尝试在本地编译资源,然后通过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

您是否使用
put
upload
命令?如果是这样,请粘贴您的代码,以便我们可以查看一下。在Capistrano中,这一行似乎让人窒息:在我自己的部署中,我不使用
put
upload
。RB您知道这一点吗?我也遇到了同样的问题,但还没有找到解决办法。嗯。。。我还没有接触过这些文件,因为它是一个入门应用程序,只有一个“帖子”支架。