Deployment 卡皮斯特拉诺上传!认为引用的本地目录位于远程服务器上

Deployment 卡皮斯特拉诺上传!认为引用的本地目录位于远程服务器上,deployment,capistrano,Deployment,Capistrano,所以我查过的每一个例子都表明这是应该怎么做的,但我想我可能已经发现了一个bug,除非有其他方法可以做到这一点。 我正在使用上传!将资产上载到远程服务器列表。任务如下所示: desc "Upload grunt compiled css/js." task :upload_assets do on roles(:all) do %w{/htdocs/css /htdocs/js}.each do |asset| upload! "#{fetch(:

所以我查过的每一个例子都表明这是应该怎么做的,但我想我可能已经发现了一个bug,除非有其他方法可以做到这一点。 我正在使用上传!将资产上载到远程服务器列表。任务如下所示:

  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
如果局部路径定义为绝对路径,例如:

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
这不是一个“对”的问题,因为我已经尝试了这两种方法(而且我认为卡皮斯特拉诺没有注意到这一点)


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

我不认为错误来自远程服务器,它看起来就像是在部署环境中运行上载命令

我刚刚创建了一个cap任务,只需要使用“~”字符进行上传,它也会失败

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>'
~/Projects/testapp$irb
2.2.2:003>File.stat(“~/Projects/testapp/public/404.html”)
Errno::enoint:没有这样的文件或目录@rb\u file\u s\u stat-~/Projects/testapp/public/404.html
发件人(irb):3:in'stat'
来自(irb):3
from/Users/supairish/.rvm/rubies/ruby-2.2.2/bin/irb:11:in`'

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

当然,我想做的是自动路径扩展,但你不可能拥有一切。我想我大部分都惊讶于它不是自动的;所以我花了几个小时试图弄清楚它为什么不起作用,最后在这里浪费时间提问(

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