Ich versuche, App-Bereitstellung mit Capistrano zu automatisieren. Ich habe fast alle Aufgaben außer s3 Montage und Demontage von Rezept abgeschlossen.Mountpoint-Fehler in Ruby on Rails-Server mit Capistrano
Hier ist das Rezept, das ich geschrieben habe, es funktioniert unter bestimmten Bedingungen und es unter bestimmten Bedingungen nicht. Die im Rezept verwendeten Befehle werden jedoch ausgeführt, wenn ich mich manuell beim Server anmelde und sie selbst ausführe.
desc "Mounting S3 for the first time"
task :mounting_s3 do
on %w(uat2_sub1 uat2_main), in: :sequence, wait: 5 do |host|
as 'cc' do
within '/var/www/test_cap/current' do
code_folder = "/var/www/test_cap/current"
path = "/var/www/test_cap/current/public/system"
unmount_path = "/var/www/test_cap/shared/public/system"
# check first if public/system exists
puts "** Checking if public/system folder exists on #{host}"
if test("[ -d #{path} ]")
puts "** public/system folder exists.."
puts "** Checking if S3 is mounted"
result = execute! "mountpoint #{path}"
puts "result #{result}"
if result.match('is a mountpoint') != nil
puts "** S3 is mounted at #{path} on #{host}"
puts "** unmounting s3 at #{unmount_path}"
execute! "fusermount -u #{unmount_path}"
puts "** s3 unmounted at #{unmount_path} on #{host}"
elsif result.match('is not a mountpoint') != nil
puts "** #{path} is not a mountpoint on #{host}"
end
else
puts "** public/system folder does not exists.."
puts "** Mounting S3"
execute! "cd #{code_folder} && s3fs cc-system-uat #{path}"
end
end
end
end
end
Ich bin in der Lage zu Aushängen S3 von Capistrano mit fusermount -u
wenn ich s3 vom Server selbst montiert habe.
Ebenso kann ich mount s3 von capistrano, wenn ich s3 vom Server selbst abgehängt habe.
Ich führe alle Befehle als cc Benutzer. Ich verstehe immer noch nicht, warum ich den folgenden Fehler bekomme. In den Protokollen ist sichtbar, dass public/system kein Mount-Punkt ist, aber ich kann von diesem Punkt aus nicht fortfahren. Wie ich das Ergebnis von Mountpoint "public/system" in einer Variablen speichern und dann verschiedene Aufgaben ausführen soll.
** Invoke bundler:map_bins (first_time)
** Execute bundler:map_bins
** Invoke deploy:set_rails_env (first_time)
** Execute deploy:set_rails_env
** Invoke deploy:set_linked_dirs (first_time)
** Execute deploy:set_linked_dirs
** Invoke deploy:set_rails_env
** Invoke deploy:mounting_s3 (first_time)
** Execute deploy:mounting_s3
** Checking if public/system folder exists on uat2_sub1
** public/system folder exists..
** Checking if S3 is mounted
00:00 deploy:mounting_s3
01 mountpoint /var/www/test_cap/current/public/system
01 /var/www/test_cap/current/public/system is not a mountpoint
cap aborted!
Exception while executing on host uat2_sub1: mountpoint /var/www/test_cap/current/public/system exit status: 1
mountpoint /var/www/test_cap/current/public/system stdout: /var/www/test_cap/current/public/system is not a mountpoint
mountpoint /var/www/test_cap/current/public/system stderr: Nothing written
/home/xyz/.rvm/gems/ruby-2.1.0/gems/sshkit-1.11.4/lib/sshkit/runners/sequential.rb:31:in `rescue in run_backend'