因此,我所查看的每个例子都表明这是应该如何做到的,但我想我可能已经发现了一个错误,除非有另一种方法可以做到这一点。 我正在使用上传!将资产上载到远程服务器列表。任务看起来像这样:
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会注意到这一点)。
这是一个错误吗?有工作吗?我只是做错了吗?
答案 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>'