How to check if Rails code is running within a migration

rake, ruby-on-rails

Solution

I had this problem in a legacy application I was maintaining. There were some observers that were interfering with migrations past a certain point, so I disabled them during migration by checking the application name and arguments

  # Activate observers that should always be running
  # config.active_record.observers = :cacher, :garbage_collector, :forum_observer# observers break a migrate from VERSION xxx - disable them for rake db:migrate
unless ( File.basename($0) == "rake" && ARGV.include?("db:migrate") )
  config.active_record.observers = :user_observer
end

Incorporating the comment below by @strw667, in Rails 6.1:

  # Activate observers that should always be running
  # config.active_record.observers = :cacher, :garbage_collector, :forum_observer# observers break a migrate from VERSION xxx - disable them for rake db:migrate
unless (File.basename($0) == "rake" &&  Rake.application.top_level_tasks == ["db:migrate")
  config.active_record.observers = :user_observer
end

Problem

Is there some easy way to detect it? I want to skip some code in the envirmonment.rb file when the rake/rails migrations are running.

Original source

Related problems