Open HiroNonoyama opened 1 year ago
I've run into the same problem
We're running into this same issue when trying to access rails c
on our app engine app
I have an error that looks like when launching Sidekiq:
undefined method `broadcast' for ActiveSupport::Logger:Class
/usr/local/bundle/ruby/3.2.0/gems/sidekiq-7.2.1/lib/sidekiq/rails.rb:62:in `block (2 levels) in <class:Rails>'
/usr/local/bundle/ruby/3.2.0/gems/sidekiq-7.2.1/lib/sidekiq.rb:98:in `configure_server'
/usr/local/bundle/ruby/3.2.0/gems/sidekiq-7.2.1/lib/sidekiq/rails.rb:53:in `block in <class:Rails>'
My stack :
It's very strange because i have only this error in RAILS_ENV=production, not in RAILS_ENV=staging (staging is the same of production)
We are also experiencing the same problem!
I've solved this by replacing Rails.logger with a BroadcastLogger to the same logger. It's easy to add into your Rails app: just put this straight after the app is initialized =)
unless Rails.logger.respond_to?(:broadcast_to)
Rails.logger = ActiveSupport::BroadcastLogger.new(Rails.logger)
end
e.g. in config/environment.rb
# Load the Rails application.
require_relative "application"
# Initialize the Rails application.
Rails.application.initialize!
# Rails.logger is a Google::Cloud::Logging::Logger, which does not have `broadcast_to` so
# we have to patch it in to allow activerecord/railtie to not error when opening a rails console. Thankfully we can
# just make Rails.logger a BroadcastLogger.
#
# See https://github.com/rails/rails/blob/v7.1.3/activerecord/lib/active_record/railtie.rb#L70
unless Rails.logger.respond_to?(:broadcast_to)
Rails.logger = ActiveSupport::BroadcastLogger.new(Rails.logger)
end
We see the same error in production with our Sidekiq workers. There is no issue when using the Rails console.
Our stack is:
Is there any update? I want to use google-cloud-ruby with Rails 7.1+.
Environment details
Steps to reproduce
Google::Cloud::Logging::Logger#broadcast_to
has to be implemented on sidekiq startup process when we use it after Rails 7.1 as hereWorkaround
We changed use_logging as false, then deploy was succeeded. But we also lost informations of LogSeverity and request trace data on Cloud Logging, so I think it's desirable to set
use_logging: true
as default.Code
Full backtrace