2016-11-23 4 views
0

capistranoを使用してアプリケーションのデプロイメントを自動化しようとしています。私はs3のマウントとアンマウントのレシピ以外のすべてのタスクをほぼ完了しました。Capistranoを使用したRuby on Railsサーバーのマウントポイントエラー

私が書いたレシピは、特定の条件で動作し、特定の条件では動作しません。しかし、手動でサーバーにログインして自分で実行すると、レシピで使用されるコマンドが実行されます。私は自分自身のサーバから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 

私はfusermount -uを使用してカピストラーノからS3アンマウントにできています。

同様に私はサーバからs3をアンマウントした場合、mount s3 from capistranoから可能です。

私はすべてのコマンドをcc userとして実行しています。なぜ私は次のエラーが出るのかまだ分かりません。ログでは、public/systemがマウントポイントではないことがわかりますが、そのポイントから先に進むことはできません。 mountpoint "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' 

答えて

0

このraise_on_non_zero_exit: falseオプションは固定されています。出力がない場合、実際にキャプチャスローエラーが発生します。

result = capture "cd #{code_folder} && mountpoint public/system" , raise_on_non_zero_exit: false 
関連する問題