【问题标题】:Where does bundle exec rake db:migrate come from?bundle exec rake db:migrate 来自哪里?
【发布时间】:2017-06-21 06:53:58
【问题描述】:

我想看看这个 rake 任务写在哪里以及它如何找到要迁移到的数据库。

【问题讨论】:

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


【解决方案1】:

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

【讨论】:

  • 谢谢@Aschen 所以 rake 可以用来做很多事情,但是 rails 附带了一些 rake 任务,其中一个是 db:migrate 它只是一个构建工具(脚本),可以访问ActiveRecord::Migrator 然后调用它的migrate 方法?这是正确的吗?
  • 是的,它是正确的 :-) 正如 @hardik 所说,它还检查表 schema_migrations 哪些迁移已经执行。
【解决方案2】:

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

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

【讨论】:

  • 所以无论是否有 Rails 服务器运行,都可以运行此任务?
  • 是的,Rake 任务不需要服务器运行。
猜你喜欢
  • 1970-01-01
  • 2012-04-18
  • 2012-01-07
  • 1970-01-01
  • 2012-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多