I just spent a few hours looking over the internet to find out how to resolve that issue. But, for the life of me, I have no idea what to do...
I followed the documentation provided by Google github.com/googleapis/google-cloud-ruby.
# Gemfile
gem 'stackdriver', '~> 0.21.1'
# development.rb
config.google_cloud.project_id = ENV.fetch('GOOGLE_CLOUD_PROJECT_ID')
config.google_cloud.keyfile = ENV.fetch('GOOGLE_CLOUD_KEYFILE')
config.google_cloud.use_logging = true # Explicitly enable or disable Logging middleware. Default: Rails.env.production?
When I run my rails app using bin/dev
, below is what I get.
4/02/24 5:17:16 ➜ Linked git:(main) ✗ bin/dev
17:17:18 web.1 | started with pid 94783
17:17:18 css.1 | started with pid 94784
17:17:20 web.1 | DEBUGGER: Debugger can attach via UNIX domain socket (/var/folders/dp/z539166d4s505qs2tpt4dhdc0000gn/T/ruby-debug-sock-501/ruby-debug-username-94783)
17:17:21 web.1 | => Booting Puma
17:17:21 web.1 | => Rails 7.1.1 application starting in development
17:17:21 web.1 | => Run `bin/rails server --help` for more startup options
17:17:22 web.1 | Exiting
17:17:22 web.1 | /Users/username/.rvm/rubies/ruby-3.1.4/bin/gems/railties-7.1.1/lib/rails/commands/server/server_command.rb:83:in `log_to_stdout': undefined method `broadcast_to' for #<Google::Cloud::Logging::Logger:0x0000000107d3e020 @writer=#<Google::Cloud::Logging::AsyncWriter:0x0000000107d3e3e0 @mon_data=#<Monitor:0x0000000107d3e278>, @mon_data_owner_object_id=1480, @logging=#<Google::Cloud::Logging::Project:0x0000000107d3f790 @service=Google::Cloud::Logging::Service(project-id), @shared_async_writer=#<Google::Cloud::Logging::AsyncWriter:0x0000000107d3e3e0 ...>>, @max_count=10000, @max_bytes=10000000, @max_queue=100, @interval=5, @threads=10, @partial_success=false, @error_callbacks=[], @cond=#<MonitorMixin::ConditionVariable:0x0000000107d3e160 @monitor=#<Monitor:0x0000000107d3e278>, @cond=#<Thread::ConditionVariable:0x0000000107d3e110>>, @stopped=true>, @log_name="ruby_app_log", @resource=#<Google::Cloud::Logging::Resource:0x0000000107d3e610 @labels={}, @type="global">, @labels={}, @level=0, @request_info_var=#<Concurrent::ThreadLocalVar:0x0000000107d3df58 @default_block=nil, @default=nil, @index=31>, @closed=false, @formatter=#<Logger::Formatter:0x0000000107d3ddf0 @datetime_format=nil>, @datetime_format="", @silencer=true, @project="project-id"> (NoMethodError)
17:17:22 web.1 |
17:17:22 web.1 | Rails.logger.broadcast_to(console)
17:17:22 web.1 | ^^^^^^^^^^^^^
17:17:22 web.1 | from /Users/username/.rvm/rubies/ruby-3.1.4/bin/gems/railties-7.1.1/lib/rails/commands/server/server_command.rb:36:in `start'
17:17:22 web.1 | from /Users/username/.rvm/rubies/ruby-3.1.4/bin/gems/railties-7.1.1/lib/rails/commands/server/server_command.rb:145:in `block in perform'
17:17:22 web.1 | from <internal:kernel>:90:in `tap'
17:17:22 web.1 | from /Users/username/.rvm/rubies/ruby-3.1.4/bin/gems/railties-7.1.1/lib/rails/commands/server/server_command.rb:136:in `perform'
17:17:22 web.1 | from /Users/username/.rvm/rubies/ruby-3.1.4/bin/gems/thor-1.3.0/lib/thor/command.rb:28:in `run'
17:17:22 web.1 | from /Users/username/.rvm/rubies/ruby-3.1.4/bin/gems/thor-1.3.0/lib/thor/invocation.rb:127:in `invoke_command'
17:17:22 web.1 | from /Users/username/.rvm/rubies/ruby-3.1.4/bin/gems/railties-7.1.1/lib/rails/command/base.rb:178:in `invoke_command'
17:17:22 web.1 | from /Users/username/.rvm/rubies/ruby-3.1.4/bin/gems/thor-1.3.0/lib/thor.rb:527:in `dispatch'
17:17:22 web.1 | from /Users/username/.rvm/rubies/ruby-3.1.4/bin/gems/railties-7.1.1/lib/rails/command/base.rb:73:in `perform'
17:17:22 web.1 | from /Users/username/.rvm/rubies/ruby-3.1.4/bin/gems/railties-7.1.1/lib/rails/command.rb:71:in `block in invoke'
17:17:22 web.1 | from /Users/username/.rvm/rubies/ruby-3.1.4/bin/gems/railties-7.1.1/lib/rails/command.rb:149:in `with_argv'
17:17:22 web.1 | from /Users/username/.rvm/rubies/ruby-3.1.4/bin/gems/railties-7.1.1/lib/rails/command.rb:69:in `invoke'
17:17:22 web.1 | from /Users/username/.rvm/rubies/ruby-3.1.4/bin/gems/railties-7.1.1/lib/rails/commands.rb:18:in `<main>'
17:17:22 web.1 | from /Users/username/.rvm/rubies/ruby-3.1.4/bin/gems/bootsnap-1.17.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:32:in `require'
17:17:22 web.1 | from /Users/username/.rvm/rubies/ruby-3.1.4/bin/gems/bootsnap-1.17.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:32:in `require'
17:17:22 web.1 | from bin/rails:4:in `<main>'
17:17:22 web.1 | exited with code 1
17:17:22 system | sending SIGTERM to all processes
17:17:22 css.1 | bin/rails aborted!
17:17:22 css.1 | SignalException: SIGTERM
17:17:22 css.1 |
17:17:22 css.1 | Tasks: TOP => tailwindcss:watch
17:17:22 css.1 | (See full trace by running task with --trace)
17:17:22 css.1 | exited with code 1
4/02/24 5:17:22 ➜ Linked git:(main) ✗
I updated my dependencies, but the result if the same:
4/02/24 5:34:19 ➜ Linked git:(main) ✗ bin/dev
17:34:25 web.1 | started with pid 96200
17:34:25 css.1 | started with pid 96201
17:34:31 web.1 | DEBUGGER: Debugger can attach via UNIX domain socket (/var/folders/dp/z539166d4s505qs2tpt4dhdc0000gn/T/rdbg-501/rdbg-96200)
17:34:35 web.1 | => Booting Puma
17:34:35 web.1 | => Rails 7.1.3 application starting in development
17:34:35 web.1 | => Run `bin/rails server --help` for more startup options
17:34:37 web.1 | Exiting
17:34:37 web.1 | /Users/username/.rvm/rubies/ruby-3.1.4/bin/gems/railties-7.1.3/lib/rails/commands/server/server_command.rb:83:in `log_to_stdout': undefined method `broadcast_to' for #<Google::Cloud::Logging::Logger:0x000000011564d4b0 @writer=#<Google::Cloud::Logging::AsyncWriter:0x000000011564d870 @mon_data=#<Monitor:0x000000011564d708>, @mon_data_owner_object_id=1480, @logging=#<Google::Cloud::Logging::Project:0x000000011564ec20 @service=Google::Cloud::Logging::Service(project-id), @shared_async_writer=#<Google::Cloud::Logging::AsyncWriter:0x000000011564d870 ...>>, @max_count=10000, @max_bytes=10000000, @max_queue=100, @interval=5, @threads=10, @partial_success=false, @error_callbacks=[], @cond=#<MonitorMixin::ConditionVariable:0x000000011564d5f0 @monitor=#<Monitor:0x000000011564d708>, @cond=#<Thread::ConditionVariable:0x000000011564d5a0>>, @stopped=true>, @log_name="ruby_app_log", @resource=#<Google::Cloud::Logging::Resource:0x000000011564daa0 @labels={}, @type="global">, @labels={}, @level=0, @request_info_var=#<Concurrent::ThreadLocalVar:0x000000011564d3e8 @default_block=nil, @default=nil, @index=31>, @closed=false, @formatter=#<Logger::Formatter:0x000000011564d280 @datetime_format=nil>, @datetime_format="", @silencer=true, @project="project-id"> (NoMethodError)
17:34:37 web.1 |
17:34:37 web.1 | Rails.logger.broadcast_to(console)
17:34:37 web.1 | ^^^^^^^^^^^^^
17:34:37 web.1 | from /Users/username/.rvm/rubies/ruby-3.1.4/bin/gems/railties-7.1.3/lib/rails/commands/server/server_command.rb:36:in `start'
17:34:37 web.1 | from /Users/username/.rvm/rubies/ruby-3.1.4/bin/gems/railties-7.1.3/lib/rails/commands/server/server_command.rb:145:in `block in perform'
17:34:37 web.1 | from <internal:kernel>:90:in `tap'
17:34:37 web.1 | from /Users/username/.rvm/rubies/ruby-3.1.4/bin/gems/railties-7.1.3/lib/rails/commands/server/server_command.rb:136:in `perform'
17:34:37 web.1 | from /Users/username/.rvm/rubies/ruby-3.1.4/bin/gems/thor-1.3.0/lib/thor/command.rb:28:in `run'
17:34:37 web.1 | from /Users/username/.rvm/rubies/ruby-3.1.4/bin/gems/thor-1.3.0/lib/thor/invocation.rb:127:in `invoke_command'
17:34:37 web.1 | from /Users/username/.rvm/rubies/ruby-3.1.4/bin/gems/railties-7.1.3/lib/rails/command/base.rb:178:in `invoke_command'
17:34:37 web.1 | from /Users/username/.rvm/rubies/ruby-3.1.4/bin/gems/thor-1.3.0/lib/thor.rb:527:in `dispatch'
17:34:37 web.1 | from /Users/username/.rvm/rubies/ruby-3.1.4/bin/gems/railties-7.1.3/lib/rails/command/base.rb:73:in `perform'
17:34:37 web.1 | from /Users/username/.rvm/rubies/ruby-3.1.4/bin/gems/railties-7.1.3/lib/rails/command.rb:71:in `block in invoke'
17:34:37 web.1 | from /Users/username/.rvm/rubies/ruby-3.1.4/bin/gems/railties-7.1.3/lib/rails/command.rb:149:in `with_argv'
17:34:37 web.1 | from /Users/username/.rvm/rubies/ruby-3.1.4/bin/gems/railties-7.1.3/lib/rails/command.rb:69:in `invoke'
17:34:37 web.1 | from /Users/username/.rvm/rubies/ruby-3.1.4/bin/gems/railties-7.1.3/lib/rails/commands.rb:18:in `<main>'
17:34:37 web.1 | from /Users/username/.rvm/rubies/ruby-3.1.4/bin/gems/bootsnap-1.18.3/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:30:in `require'
17:34:37 web.1 | from /Users/username/.rvm/rubies/ruby-3.1.4/bin/gems/bootsnap-1.18.3/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:30:in `require'
17:34:37 web.1 | from bin/rails:4:in `<main>'
17:34:37 web.1 | exited with code 1
17:34:37 system | sending SIGTERM to all processes
17:34:37 css.1 | bin/rails aborted!
17:34:37 css.1 | SignalException: SIGTERM
17:34:37 css.1 |
17:34:37 css.1 | Tasks: TOP => tailwindcss:watch
17:34:37 css.1 | (See full trace by running task with --trace)
17:34:38 css.1 | exited with code 1
4/02/24 5:34:38 ➜ Linked git:(main) ✗
What should I do to make it work?
This is a known issue regarding Google Cloud Ruby support for Rails 7.1. See the the Github issue on their repo for details.
Google::Cloud::Logging::Logger#broadcast_to
needs to be implemented for Rails 7.1 to be supported.
A PR was submitted here, but it wasn't yet merged.
Until these changes are released, the workaround suggested here by henrahmagix is to configure Rails logger according to the following in your application's config/environment.rb:
unless Rails.logger.respond_to?(:broadcast_to)
Rails.logger = ActiveSupport::BroadcastLogger.new(Rails.logger)
end