bundle exec rake db:migrate 来自哪里?
Where does bundle exec rake db:migrate come from?
我想看看这个 rake 任务写在哪里以及它如何找到要迁移到的数据库。
db:migrate
是抽佣任务。 db:migrate 任务 (内置 Rails 支持程序) 将搜索项目的 db/migrate 目录并使用其中的文件更新数据库的架构.
当您 运行 db:migrate 时,rails 将检查一个名为 schema_migrations 的特殊 table,其中包含应用到的最后一次迁移的时间戳数据库。它将存储已经 运行.
的迁移文件的时间戳
此任务是 ActiveRecord
的一部分。您可以在此处查看它的定义位置:database_tasks.rb
基本上是任务调用 ActiveRecord::Migrator
,它是负责将迁移应用到数据库的模块。
例如,如果您创建一个新的迁移并获得以下输出:
Running via Spring preloader in process 4675
invoke active_record
create db/migrate/20170621091940_create_user.rb
当您调用 db:migrate
任务时,它会调用 ActiveRecord::Migrator.migrate("db/migrate", 20170621091940)
并应用您的迁移。
我想看看这个 rake 任务写在哪里以及它如何找到要迁移到的数据库。
db:migrate
是抽佣任务。 db:migrate 任务 (内置 Rails 支持程序) 将搜索项目的 db/migrate 目录并使用其中的文件更新数据库的架构.
当您 运行 db:migrate 时,rails 将检查一个名为 schema_migrations 的特殊 table,其中包含应用到的最后一次迁移的时间戳数据库。它将存储已经 运行.
的迁移文件的时间戳此任务是 ActiveRecord
的一部分。您可以在此处查看它的定义位置:database_tasks.rb
基本上是任务调用 ActiveRecord::Migrator
,它是负责将迁移应用到数据库的模块。
例如,如果您创建一个新的迁移并获得以下输出:
Running via Spring preloader in process 4675
invoke active_record
create db/migrate/20170621091940_create_user.rb
当您调用 db:migrate
任务时,它会调用 ActiveRecord::Migrator.migrate("db/migrate", 20170621091940)
并应用您的迁移。