Есть ли способ отключить Erubis от печати "** Erubis 2.6.5" при запуске среды Rails? - PullRequest
4 голосов
/ 04 мая 2010

У меня есть несколько частых заданий Cron, которые запускаются через Rake, и выходные данные этих заданий отправляются по электронной почте (через MAILTO). В связи с тем, что эти задачи загружают среду Rails (в которую входит Erubis), они всегда выводят «** Erubis 2.6.5» при запуске. Это означает, что электронная почта всегда генерируется, поскольку Cron получает выходные данные. Есть ли способ настроить Erubis на прекращение печати этого сообщения при запуске на консоль?

Ответы [ 4 ]

2 голосов
/ 20 августа 2010

Обновление: приведенное ниже решение относится к нескольким годам назад и применяется, когда Rail 2 был новым, а плагины все еще были распространены. Теперь, когда использование драгоценного камня является лучшим и стандартным решением, ответ ниже не применим к новым приложениям; вместо этого работает решение, опубликованное @TALlama. Я оставляю здесь этот ответ, потому что это рабочее решение, если ваше приложение устарело и все еще использует плагин.

Вы можете изменить плагин rails_xss, чтобы удалить это сообщение. Нарушающая часть плагина находится по адресу "/plugins/rails_xss/lib/rails_xss/erubis.rb". В самом верху файла обязательно:

require 'erubis/helpers/rails_helper'

Измените это требование, просто перенаправив стандартный вывод на фиктивный ввод-вывод перед требованием, и восстановите стандартный вывод, когда закончите, например:

stdout_original, $stdout = $stdout, StringIO.new
require 'erubis/helpers/rails_helper'
$stdout = stdout_original

Это некрасиво, но решает проблему относительно ненавязчивым способом. У меня была та же проблема, что и у OP, когда мне нужно было перенаправить вывод процесса «скрипт / запуск» в другой процесс, и erubis грубо нарушал соглашение о том, что компоненты / плагины rails молчат на передней панели stdout (именно по этой причине) , Приведенное выше решение - это то, что я придумал, и оно работает для меня.

2 голосов
/ 08 февраля 2012

Используя ответы здесь плюс ответ, связанный с @ michael-andrews, я внес следующее изменение в наш проект Rails 2.3.14, который не требует никаких изменений в источнике наших драгоценных камней. Откройте config/boot.rb и найдите класс Rails::Boot. Вы дополняете метод load_gems:

class Rails::Boot
  def run
    load_initializer

    Rails::Initializer.class_eval do
      def load_gems
        buffer = ""
        previous_stdout, $stdout = $stdout, StringIO.new(buffer)

        @bundler_loaded ||= Bundler.require :default, Rails.env
      ensure
        $stdout = previous_stdout

        output = buffer.gsub(/^\*\* Erubis (\d+\.?)+\s*/, '')
        puts output unless output.strip.empty?
      end
    end

    Rails::Initializer.run(:set_load_path)
  end
end

Способ, которым это работает, заключается в том, что мы перенаправляем $ stdout при загрузке гемов, вытягивая поток в локальный буфер. Затем мы проверяем буфер после того, как все будет завершено, удаляем вызов Erubis и показываем все, что могло произойти (не хочу пропустить то, чего мы не ожидаем!).

1 голос
/ 19 августа 2012

Поддержите эти запросы и вы получите их без каких-либо обезьян-патчей

https://github.com/rails/rails_xss/pull/14 (официальный плагин rails_xss)

https://github.com/joloudov/rails_xss/pull/1 (для драгоценного камня rails_xss)

1 голос
/ 01 июля 2010

Вам необходимо переопределить rails_helper.rb в erubis - это неправильные строки:

## finish
ActionController::Base.new.logger.info "** Erubis #{::Erubis::VERSION}"
$stdout.puts "** Erubis #{::Erubis::VERSION}" if rails22

Я предлагаю скопировать содержимое этого файла в новый, убрать строки журнала и потребовать, чтобы файл better_rails_helper вместо erubis предоставлял один. , `

...