ActionView::Template::Error(未定义的方法`silence')
ActionView::Template::Error (undefined method `silence' for)
我在 heroku 上有一个很奇怪的问题。我的视图如下所示:
= content_for :header_title do
= t('.header_title')
- if @appointments.exists?
%table.table.table-striped.table-bordered.table-hover
%thead
%tr
%th= t('.id')
%th= t('.athena_health_id')
%th= t('.start_time')
%th= t('.duration')
%th= t('.provider')
%th= t('.created_at')
%th= t('.updated_at')
%tbody
= render @appointments
= paginate @appointments
- else
%h3.text-center= t('.appointments_not_found')
%hr/
没什么特别的。当我访问在 heroku 上使用此模板的页面时,我收到:
ActionView::Template::Error (undefined method `silence' for #<Logger:0x007f7a86267a70>):
规格正在通过。在我的本地一切正常。我不知道发生了什么。 Stacktrace 显示问题出在以下行:
= paginate @appointments
我正在使用 Rails 5.0 和 kaminari (1.0.0.alpha)。有什么想法吗?
编辑:
在我的 production.rb 中,我有:
if ENV['RAILS_LOG_TO_STDOUT'].present?
config.logger = ActiveSupport::TaggedLogging.new(Logger.new(STDOUT))
end
config.log_formatter = ::Logger::Formatter.new
在 Rails5 中,silence
方法已从 ::Logger
基础 class 中删除(参见此 issue)
因此,要传递 ::Logger
实例,请尝试传递公开 silence
方法的 ActiveSupport::Logger
实例(参见 documentation),如下所示:
config.logger = ActiveSupport::TaggedLogging.new(ActiveSupport::Logger.new(STDOUT))
注意:
ActiveSupport::Logger
继承自 ::Logger
基础 class 并包含 LoggerSilence
模块(参见 documentation)
来自我的 rails
控制台的示例(rails5 和 ruby2.3.0)
logger = ActiveSupport::TaggedLogging.new(Logger.new(STDOUT))
=> #<Logger:0x007f890b8a3d10 @progname=nil, @level=0, @default_formatter=#<Logger::Formatter:0x007f890b8a2cd0 @datetime_format=nil>, @formatter=#<ActiveSupport::Logger::SimpleFormatter:0x007f890b8a26e0 @datetime_format=nil>, @logdev=#<Logger::LogDevice:0x007f890b8a2870 @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#<IO:<STDOUT>>, @mon_owner=nil, @mon_count=0, @mon_mutex=#<Thread::Mutex:0x007f890b8a2730>>>
logger.silence
NoMethodError: undefined method `silence' for #<Logger:0x007f890b8a3d10>
# ...
logger = ActiveSupport::TaggedLogging.new(ActiveSupport::Logger.new(STDOUT))
=> #<ActiveSupport::Logger:0x007f890bd2a028 @progname=nil, @level=0, @default_formatter=#<Logger::Formatter:0x007f890bd29fb0 @datetime_format=nil>, @formatter=#<ActiveSupport::Logger::SimpleFormatter:0x007f890bd29f10 @datetime_format=nil>, @logdev=#<Logger::LogDevice:0x007f890bd29f60 @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#<IO:<STDOUT>>, @mon_owner=nil, @mon_count=0, @mon_mutex=#<Thread::Mutex:0x007f890bd29f38>>, @local_levels=#<Concurrent::Map:0x007f890bd29ec0 entries=0 default_proc=nil>>
logger.silence
LocalJumpError: no block given (yield)
# The method exists, but I don't pass any block
我在 heroku 上有一个很奇怪的问题。我的视图如下所示:
= content_for :header_title do
= t('.header_title')
- if @appointments.exists?
%table.table.table-striped.table-bordered.table-hover
%thead
%tr
%th= t('.id')
%th= t('.athena_health_id')
%th= t('.start_time')
%th= t('.duration')
%th= t('.provider')
%th= t('.created_at')
%th= t('.updated_at')
%tbody
= render @appointments
= paginate @appointments
- else
%h3.text-center= t('.appointments_not_found')
%hr/
没什么特别的。当我访问在 heroku 上使用此模板的页面时,我收到:
ActionView::Template::Error (undefined method `silence' for #<Logger:0x007f7a86267a70>):
规格正在通过。在我的本地一切正常。我不知道发生了什么。 Stacktrace 显示问题出在以下行:
= paginate @appointments
我正在使用 Rails 5.0 和 kaminari (1.0.0.alpha)。有什么想法吗?
编辑: 在我的 production.rb 中,我有:
if ENV['RAILS_LOG_TO_STDOUT'].present?
config.logger = ActiveSupport::TaggedLogging.new(Logger.new(STDOUT))
end
config.log_formatter = ::Logger::Formatter.new
在 Rails5 中,silence
方法已从 ::Logger
基础 class 中删除(参见此 issue)
因此,要传递 ::Logger
实例,请尝试传递公开 silence
方法的 ActiveSupport::Logger
实例(参见 documentation),如下所示:
config.logger = ActiveSupport::TaggedLogging.new(ActiveSupport::Logger.new(STDOUT))
注意:
ActiveSupport::Logger
继承自 ::Logger
基础 class 并包含 LoggerSilence
模块(参见 documentation)
来自我的 rails
控制台的示例(rails5 和 ruby2.3.0)
logger = ActiveSupport::TaggedLogging.new(Logger.new(STDOUT))
=> #<Logger:0x007f890b8a3d10 @progname=nil, @level=0, @default_formatter=#<Logger::Formatter:0x007f890b8a2cd0 @datetime_format=nil>, @formatter=#<ActiveSupport::Logger::SimpleFormatter:0x007f890b8a26e0 @datetime_format=nil>, @logdev=#<Logger::LogDevice:0x007f890b8a2870 @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#<IO:<STDOUT>>, @mon_owner=nil, @mon_count=0, @mon_mutex=#<Thread::Mutex:0x007f890b8a2730>>>
logger.silence
NoMethodError: undefined method `silence' for #<Logger:0x007f890b8a3d10>
# ...
logger = ActiveSupport::TaggedLogging.new(ActiveSupport::Logger.new(STDOUT))
=> #<ActiveSupport::Logger:0x007f890bd2a028 @progname=nil, @level=0, @default_formatter=#<Logger::Formatter:0x007f890bd29fb0 @datetime_format=nil>, @formatter=#<ActiveSupport::Logger::SimpleFormatter:0x007f890bd29f10 @datetime_format=nil>, @logdev=#<Logger::LogDevice:0x007f890bd29f60 @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#<IO:<STDOUT>>, @mon_owner=nil, @mon_count=0, @mon_mutex=#<Thread::Mutex:0x007f890bd29f38>>, @local_levels=#<Concurrent::Map:0x007f890bd29ec0 entries=0 default_proc=nil>>
logger.silence
LocalJumpError: no block given (yield)
# The method exists, but I don't pass any block