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

时间:2015-07-28 20:14:52

标签: deployment capistrano

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

  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会注意到这一点)。

这是一个错误吗?有工作吗?我只是做错了吗?

2 个答案:

答案 0 :(得分:2)

我最终发现实现这一目标的最佳方法是实际使用路径扩展! (headsmack)

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

当然,我想要的是自动路径扩展,但你无法拥有一切。我想我大部分都是傻瓜,它不是自动的;所以我花了几个小时试图找出它为什么不起作用,最后浪费时间在这里问。 :(

答案 1 :(得分:0)

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

我刚刚创建了一个单一的上限任务,只是使用“〜”字符进行上传,它也失败了

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>'