Engines and migrations

There shouldn't be a problem here. If you had your shared migration in a plugin, the engines plugin provides the "script/generate plugin_migration" command to perform these migrations *at whatever point your application is currently at*.

In practice, this means that in App_1, you might end up with RAILS_ROOT/db/migrate/002_migrate_shared_plugin_to_version_1.rb, and in App_2 you may get RAILS_ROOT/db/migrate/ 152_migrate_shared_plugin_to_version_1.rb, but of which should run fine (presuming that your shared migration doesn't depend on anything in the current DB state).

I think the misunderstanding is here: "I can call a command to append all the migrations in the engine onto the migrations already in db/ migrations folder." The migrations from the plugin are never appended, copied or moved. Instead, they are called in a single command within the RAILS_ROOT/db/migrate generated migration:

  Rails.plugins[:shared_plugin].migrate(5)

...which would run all of the migrations (up to version 5, in this case, but normally this is just the latest version) in the plugin dynamically.

HTH

James