Хвост производства с Capistrano - как это остановить - PullRequest
9 голосов
/ 07 марта 2011

Я нашел этот отличный фрагмент кода на нескольких сайтах, что позволило мне проанализировать производственный журнал через Capistrano:

desc "tail production log files" 
task :tail_logs, :roles => :app do
  run "tail -f #{shared_path}/log/production.log" do |channel, stream, data|
    puts  # for an extra line break before the host name
    puts "#{channel[:host]}: #{data}" 
    break if stream == :err    
  end
end

Это прекрасно работает, однако, когда я заканчиваю читать логи, я нажимаю Ctrl + C, и это вызывает неприятную ошибку на моей консоли. Не то чтобы это была огромная проблема, но я нахожу это раздражающим. Что я могу сделать, чтобы не возникало никаких ошибок, но просмотр задачи / хвоста / журнала просто тихо заканчивается?

Кроме того, я не очень хорошо разбираюсь в том, как анализировать журналы - действительно ли это лучший способ просто просмотреть самые последние события в вашем (удаленном производственном) журнале или есть лучший способ? Я знаю, что есть gazillion инструментов для анализа журналов, но я хочу, чтобы решение было просто, чтобы увидеть последние пару запросов, а не что-то громоздкое и сложное. Я не уверен, действительно ли это решение Capistrano действительно оптимально. Мол, какое решение использует большинство людей?

Ответы [ 5 ]

36 голосов
/ 08 марта 2011

Попробуйте trap("INT") { puts 'Interupted'; exit 0; } вот так:

desc "tail production log files" 
task :tail_logs, :roles => :app do
  trap("INT") { puts 'Interupted'; exit 0; }
  run "tail -f #{shared_path}/log/production.log" do |channel, stream, data|
    puts  # for an extra line break before the host name
    puts "#{channel[:host]}: #{data}" 
    break if stream == :err
  end
end

Надеюсь, это поможет.

3 голосов
/ 22 августа 2014

Это было довольно легко найти в блоге

Но вот код для Capistrano 3

namespace :logs do
  desc "tail rails logs" 
  task :tail_rails do
    on roles(:app) do
      execute "tail -f #{shared_path}/log/#{fetch(:rails_env)}.log"
    end
  end
end

У меня были проблемы с переменной rails_env, поэтомуя просто заменил его, но оно может стоить того, чтобы оно заработало, поэтому я оставил его.

1 голос
/ 12 августа 2013

Я внес одно небольшое изменение в великолепный ответ Джезнет.Если вы запускаете capistrano-ext с несколькими средами, как у нас, вы можете автоматически указать RAILS_ENV:

run "tail -f #{shared_path}/log/#{rails_env}.log" do |channel, stream, data|
0 голосов
/ 11 апреля 2015

Я использую драгоценный камень capistrano-rails-tail-log и все в порядке.https://github.com/ayamomiji/capistrano-rails-tail-log

0 голосов
/ 23 октября 2013

У меня была проблема с частью ловушки ("INT"). В то время как он заставляет скрипт завершать работу без ошибок, хвостовой процесс все еще работает на удаленных машинах. Если исправить это с помощью этой строки:

trap("INT") { puts 'Interupted'; run "killall -u myusername tail"; exit 0; }

Не элегантно, но работает на меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...