Ошибка точки монтирования на сервере Ruby on Rails с использованием Capistrano

Я пытаюсь автоматизировать развертывание приложения с помощью capistrano. Я почти выполнил все задачи, кроме s3.

Вот рецепт, который я написал, он работает в определенных условиях и не работает в определенных условиях. Но команды, используемые в рецепте, запускаются, если я вручную захожу на сервер и выполняю их самостоятельно.

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

Я могу размонтировать S3 из Capistrano, используя fusermount -u если я сам смонтировал s3 с сервера.

Точно так же я могу смонтировать s3 из capistrano, если я сам размонтировал s3 с сервера.

Я запускаю все команды как пользователь cc. Я до сих пор не понимаю, почему я получаю следующую ошибку. В журналах видно, что public/system не является точкой монтирования, но я не могу двигаться вперед с этой точки. Поскольку я хочу сохранить результат точки монтирования "public/system" в переменной, а затем выполнить различные задачи.

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

1 ответ

Решение

Это raise_on_non_zero_exit: false вариант исправил это. На самом деле захват выдает ошибку, если нет вывода.

result = capture "cd #{code_folder} && mountpoint public/system" , raise_on_non_zero_exit: false
Другие вопросы по тегам