rails / mission_control-jobs

Dashboard and Active Job extensions to operate and troubleshoot background jobs
MIT License
594 stars 68 forks source link

MissionControl seems to be using production.rb's queue database instead of development #168

Open gczh opened 1 month ago

gczh commented 1 month ago

I'm trying to figure out if there is any way to determine the database that MissionControl is connected to. At the moment, what seems to be the case is this:

When running SolidQueue::Job.connection.raw_connection in rails console, it seems to be using the local database configured in database.yml

development:
  primary:
    <<: *default
    database: rails_app_development
  external:
    url: <%= ENV["EXTERNAL_DATABASE_URL"] %>
    database_tasks: false
    replica: true
  queue:
    <<: *default
    database: rails_app_development_queue
    migrations_paths: db/queue_migrate

production:
  primary:
    <<: *default
    database: rails_app_production
    url: <%= ENV["DATABASE_URL"] %>
  external:
    url: <%= ENV["EXTERNAL_DATABASE_URL"] %>
    database_tasks: false
    replica: true
  queue:
    <<: *default
    url: <%= ENV["QUEUE_DATABASE_URL"] %>
    database: rails_app_production_queue
    migrations_paths: db/queue_migrate

However, when I look at website.com/jobs and localhost:3000/jobs, it seems that the number of jobs completed is exactly the same. This leads me to believe that the MissionControl on localhost is actually pointing to the QUEUE_DATABASE_URL in database.yml

However, even after commenting out that in .env, it still seems to be connecting to the remote queue database.

Other notes

Looks like if I were to comment out the queue database configuration for production in database.yml, MissionControl would then point to development's database correctly.

I undid the comments after restarting the server, and it's still pointing to the local db, which is the correct and expected behaviour. This makes me wonder if MissionControl is caching database connections somehow?

rosa commented 2 weeks ago

Huh, no, this is very strange. Mission Control doesn't do anything with DB connections, it relies solely on Solid Queue's connections, so it uses whatever Solid Queue is using. I haven't seen anything like this before. Are you manually configuring Mission Control's applications or relying on the default configuration?

gczh commented 2 weeks ago

Huh, no, this is very strange. Mission Control doesn't do anything with DB connections, it relies solely on Solid Queue's connections, so it uses whatever Solid Queue is using. I haven't seen anything like this before. Are you manually configuring Mission Control's applications or relying on the default configuration?

Ahhh, gotcha! This is what it looks like for me in development.rb

  config.active_job.queue_adapter = :solid_queue
  config.solid_queue.connects_to = { database: { writing: :queue, reading: :queue } }
  config.solid_queue.logger = ActiveSupport::Logger.new(STDOUT, level: :debug)
  config.log_level = :debug