2013-10-25 2 views
6

Я слишком долго изучал эту тему, поэтому я должен опубликовать это. У меня есть несколько приложений, запускающих эту настройку, и один из них полностью запускается при запуске рельсов (рельсы s). Они оба настроены почти точно так же, но я не могу найти иглу в стоге сена здесь. У кого-нибудь есть указатели на то, как найти эту проблему?rails 4 log4r server.rb: 78: in `start ': undefined method` formatter'

установка на основе: http://blog.mmlac.com/log4r-for-rails/comment-page-1/#comment-1731

, когда я пытаюсь запустить рельсы S:

=> Booting WEBrick 
=> Rails 4.0.0 application starting in development on http://0.0.0.0:3000 
=> Run `rails server -h` for more startup options 
=> Ctrl-C to shutdown server 
Exiting 
/Users/chrishough/Placewise/code/ApiDigest/.bundle/ruby/2.0.0/gems/railties-4.0.0/lib/rails/commands/server.rb:78:in `start': undefined method `formatter' for #<Log4r::Logger:0x007f85be89abe8> (NoMethodError) 
    from /Users/chrishough/Placewise/code/ApiDigest/.bundle/ruby/2.0.0/gems/railties-4.0.0/lib/rails/commands.rb:78:in `block in <top (required)>' 
    from /Users/chrishough/Placewise/code/ApiDigest/.bundle/ruby/2.0.0/gems/railties-4.0.0/lib/rails/commands.rb:73:in `tap' 
    from /Users/chrishough/Placewise/code/ApiDigest/.bundle/ruby/2.0.0/gems/railties-4.0.0/lib/rails/commands.rb:73:in `<top (required)>' 
    from bin/rails:4:in `require' 
    from bin/rails:4:in `<main>' 

как я log4r настроен в моем файле application.rb:

#log4r requirements 
require 'log4r' 
require 'log4r/yamlconfigurator' 
require 'log4r/outputter/datefileoutputter' 
include Log4r 

module DigestApi 
    class Application < Rails::Application 
    # Settings in config/environments/* take precedence over those specified here. 
    # Application configuration should go into files in config/initializers 
    # -- all .rb files in that directory are automatically loaded. 

    # ----------------------------------------------------------------------------------- 
    # assign log4r's logger as rails' logger. 
    log4r_config= YAML.load_file(File.join(File.dirname(__FILE__),"log4r.yml")) 
    log_cfg = YamlConfigurator 
    log_cfg["ENV"] = Rails.env 
    log_cfg.decode_yaml(log4r_config['log4r_config']) 

    # # disable standard Rails logging 
    config.logger = Log4r::Logger['rails'] 
    ActiveRecord::Base.logger = Log4r::Logger['sqlserver'] 

    # #nice for multiple-instance webservers like unicorn 
    # #to monitor (re-)starts 
    # #log whenever a worker (re-)started 
    Log4r::Logger['rails'].info "LAUNCH PUMA WORKER" 
    # ----------------------------------------------------------------------------------- 

Мой log4r. yml файл:

log4r_config: 
    # define all loggers: 
    loggers: 
    - name   : rails 
     level   : DEBUG 
     trace   : 'true' 
     outputters : 
     - console 
     - rails_file 

    - name   : sqlserver 
     level   : DEBUG 
     trace   : 'false' 
     outputters : 
     - sqlserver_file 

    - name   : sqlserver_long_query 
     level   : DEBUG 
     trace   : 'false' 
     outputters : 
     - sqlserver_long_query_file 

    - name   : missing_route 
     level   : DEBUG 
     trace   : 'false' 
     outputters : 
     - missing_route_file 

    # define all outputters (incl. formatters) 
    outputters: 
    - type: StdoutOutputter 
    name: console 
    formatter: 
     date_pattern: '%H:%M:%S' 
     pattern  : '%d %l: %m' 
     type  : PatternFormatter 

    - type: FileOutputter 
    name: rails_file 
    filename: "log/#{ENV}.log" 
    trunc: false 
    formatter: 
     date_pattern: '%Y %m %d %H:%M:%S.%L %z' 
     pattern  : '%d %l: %m' 
     type  : PatternFormatter 

    - type: FileOutputter 
    name: sqlserver_file 
    filename: "log/sql.log" 
    trunc: false 
    formatter: 
     date_pattern: '%Y %m %d %H:%M:%S.%L %z' 
     pattern  : '%d %l: %m' 
     type  : PatternFormatter 

    - type: FileOutputter 
    name: sqlserver_long_query_file 
    filename: "log/sql_qry_long.log" 
    trunc: false 
    formatter: 
     date_pattern: '%Y %m %d %H:%M:%S.%L %z' 
     pattern  : '%d %l: %m' 
     type  : PatternFormatter 

    - type: FileOutputter 
    name: missing_route_file 
    filename: "log/missing_route.log" 
    trunc: false 
    formatter: 
     date_pattern: '%Y %m %d %H:%M:%S.%L %z' 
     pattern  : '%d %l: %m' 
     type  : PatternFormatter 

ответ

2

Глядя на это сообщение [1], возможно, вам придется импортировать FileOutputter. Не совсем уверен.

Я думаю, что это проблема импорта, когда другой сервер работает нормально. Просто попробуйте импортировать все, что вы, возможно, используете из Log4r, и убедитесь, что вы не вызываете [1] упомянутые функции непосредственно на регистраторе где-то в другом месте.

Если это не сработает, попробуйте настроить простой регистратор программно, затем переместите этот регистратор в .yml, а затем разверните его обратно туда, где он был раньше.

Надеется, что это помогает вам, дайте мне знать, если вам нужна дополнительная помощь

[1] Undefined Method Formatter for Log4r in RAILS 4.0

+0

Вы ссылаетесь на использование другого оператора требований? т.е. требовать «log4r/outputter/fileoutputter» –

+0

точно. Попробуйте импортировать каждый класс, который используется в yml, попробуйте повторно отложить его, если возникла ошибка. Если он по-прежнему ломается, начинайте с нуля с помощью самого простого регистратора с кодовым определением, затем проведите свой путь вверх и посмотрите, снова ли он снова ломается. – mmlac

+0

yep, я пробовал все, он по-прежнему ломается по какой-то причине. Я точно слежу за вашим сообщением в блоге, и независимо от того, что я делаю, он продолжает раздувать это приложение. Любые другие идеи? –

10

Я работала в одной и те же проблемы, поэтому я создал инициализатор продлить log4r с пустым методом форматировочного , Просто создайте файл с именем log_formatting.rb в инициализаторах и вставьте в него следующее:

class Log4r::Logger 
    def formatter() 
    end 
end 

Это работало для меня. Я надеюсь, что это помогает.

+0

Куда поместить log_formatting.rb в? – Gank

+0

Затем добавьте 'require 'log_formatting" '? У меня все еще есть та же проблема – Gank

+0

поместите его в каталог инициализаторов вашего проекта –

0

Другим возможным может быть просмотр вашего файла environment.rb, если вы случайно прокомментировали/удалили следующие строки.

require_relative 'application' 
Rails.application.initialize! 
Смежные вопросы