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