上传!认为 ~ 引用的本地目录在远程服务器上

capistrano upload! thinks ~ referenced local directory is on remote server

所以我查过的每个例子都表明这是应该如何做的,但我想我可能已经发现了一个错误,除非有另一种方法来做到这一点。 我正在使用上传!将资产上传到远程服务器列表。任务看起来像这样:

  desc "Upload grunt compiled css/js."
  task :upload_assets do
    on roles(:all) do 
      %w{/htdocs/css /htdocs/js}.each do |asset|
          upload! "#{fetch(:local_path) + asset}", "#{release_path.to_s + '/' + asset}", recursive: true
      end
    end
  end

如果local_path定义为绝对路径如:

set :local_path:,  '/home/dcmbrown/projects/ABC'

这很好用。但是,如果我执行以下操作:

set :local_path:,  '~/projects/ABC'

我最终得到错误:

The deploy has failed with an error: Exception while executing on ec2-54-23-88-125.us-west-2.compute.amazon.com: No such file or directory - ~/projects/ABC/htdocs/css

这不是'vs'问题,因为我都试过了(而且我不认为 capistrano 会注意这个问题)。

这是一个错误吗?有解决办法吗?我只是做错了吗?

我认为错误不是来自远程服务器,它只是看起来像,因为它是 运行 部署上下文中的上传命令。

我刚刚创建了一个上限任务来使用“~”字符进行上传,但它也失败了

cap aborted!
SSHKit::Runner::ExecuteError: Exception while executing as deploy@XXX: No such file or directory @ rb_file_s_stat - ~/Projects/testapp/public/404.html

这似乎是一个 Ruby 问题,而不是 Capistrano,因为这在 Ruby 控制台中也失败了

~/Projects/testapp $ irb
2.2.2 :003 > File.stat('~/Projects/testapp/public/404.html')

Errno::ENOENT: No such file or directory @ rb_file_s_stat - ~/Projects/testapp/public/404.html
from (irb):3:in `stat'
from (irb):3
from /Users/supairish/.rvm/rubies/ruby-2.2.2/bin/irb:11:in `<main>'

我最终发现最好的方法是实际使用路径扩展! (头晕)

irb> File.expand_path('~dcmbrown/projects/ABC')
=> "/home/dcmbrown/projects/ABC"

当然我想要的是做自动路径扩展,但你不能拥有一切。我想我大部分时间都傻眼了,因为它没有自动;这么多,所以我花了几个小时试图弄清楚为什么它不起作用并最终浪费时间在这里问。 :(