【发布时间】:2015-03-05 12:52:39
【问题描述】:
我目前正在编写一个 ruby 脚本,以允许我将 .war 文件上传到 VPC。要更新我们云中的 java 服务,我只需在本地使用 maven 构建,然后将 VPC 中的 .war 文件替换为我通过构建创建的文件。我的问题在于我的脚本中的文件路径。似乎即使尝试运行简单的 bash 命令,例如“mv”或“rm”,我也会遇到以下错误 -
mv: missing destination file operand after `/tmp/asset-manager-service-1.0.2-SNAPSHOT.war'
Try `mv --help' for more information.
bash: line 1: /srv/asset-manager-service/war/: Is a directory
我认为这可能是因为我在第二个 mv 目录之前有一个变量这一事实有问题?当我尝试使用“rm”时,同样的错误也适用。我是 ruby 新手,所以这可能不是很漂亮,但这里有一些有问题的代码。
#handles the old war file and pushes up the new one.
def handle_war(value)
war_file_name = File.basename("#$warfile")
local_war_path = File.absolute_path("#$warfile")
puts File.exist?(local_war_path)
remote_war_path = "/tmp/#{war_file_name}"
puts "IP is " + value
puts "CONNECTING to ubuntu@#{value}.."
Net::SSH.start("#{value}", "ubuntu") do |ssh|
puts 'Connected.'
puts "SENDING #{local_war_path} to VPC /tmp folder - #{remote_war_path}"
ssh.sftp.upload!('asset-manager-service-1.0.2-SNAPSHOT.war',
remote_war_path)
print "SENT - New .war created at /tmp/#{war_file_name}"
old_war_file = ssh.exec!("ls /srv/#{$service_dir}/war/*war")
old_war_file_name = File.basename(old_war_file)
puts 'What do you want to do with this old war file? - (delete/backup)'
puts old_war_file
input = gets.chomp
if input=='delete'
puts ssh.exec!("sudo rm #{old_war_file}")
puts 'If no errors thrown - old .war file deleted successfully.'
elsif input == 'backup'
puts ssh.exec!("sudo mv #{old_war_file} srv/#$service_dir/war_backup/#{old_war_file_name}")
puts 'If no errors thrown - old .war file backed up successfully at'
puts "srv/#$service_dir/war_backup/#{old_war_file_name}"
else
puts 'no valid option chosen. Leaving .war file as is. You will have to delete or backup the .war manually.'
end
puts "MOVING the new war file from tmp into #{$service_dir}/war directory"
puts ssh.exec!("sudo mv /tmp/#{war_file_name} /srv/#{$service_dir}/war/")
puts 'done!'
end
end
我认为这里的主要问题是,当我将变量用作文件路径的一部分时,似乎有一些有趣的事情。我不确定为什么这会有所不同。我理解这个问题可能有点很难断章取义,但我真的在这里撞了我的头。长话短说 -
- 使用 File.basename 时文件路径会改变吗?
- 在文件路径中使用变量与硬编码字符串有区别吗?
- 我的代码中是否有任何明显的错误可能是问题所在?
【问题讨论】:
标签: java ruby-on-rails ruby bash scripting