bundle exec rake db:migrate来自哪里?

时间:2017-06-21 06:53:58

标签: ruby-on-rails ruby rake rake-task

我要查看此rake任务的编写位置以及它如何找到要迁移到的db。

2 个答案:

答案 0 :(得分:2)

此任务是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)并应用您的迁移。

答案 1 :(得分:1)

db:migrate是一项佣金任务。 db:migrate task (内置的Rails支持程序)将搜索项目的db / migrate目录,并使用其中的文件更新数据库的架构。

当您运行db:migrate时,rails将检查名为schema_migrations的特殊表,该表包含应用于数据库的上次迁移的时间戳。它将存储已运行的迁移文件的时间戳。