为啥 rake db:migrate:reset 未在 rake -T 中列出?

Posted

技术标签:

【中文标题】为啥 rake db:migrate:reset 未在 rake -T 中列出?【英文标题】:Why is rake db:migrate:reset not listed in rake -T?为什么 rake db:migrate:reset 未在 rake -T 中列出? 【发布时间】:2011-04-26 11:25:29 【问题描述】:

为什么rake -T 没有列出一些 rake 任务?喜欢db:migrate:reset?我可以毫无问题地执行它,但为什么它没有列在那里?有没有办法获得真正完整的 rake 任务列表?

% 耙子 -T (在 /home/zeus/projects/my_project 中) rake about # 列出所有 Rails 框架和环境的版本 rake db:create # 从 config/database.yml 为当前 Rails.env 创建数据库(使用 db:create:all 在配置中创建所有数据库) rake db:drop # 删除当前 Rails.env 的数据库(使用 db:drop:all 删除所有数据库) rake db:fixtures:load # 将夹具加载到当前环境的数据库中。 rake db:migrate # 迁移数据库(选项:VERSION=x,VERBOSE=false)。 rake db:migrate:status # 显示迁移状态 rake db:rollback # 将模式回滚到以前的版本(指定步骤 w/STEP=n)。 rake db:schema:dump # 创建一个 db/schema.rb 文件,该文件可移植地用于 AR 支持的任何数据库 rake db:schema:load # 加载一个 schema.rb 文件到数据库中 rake db:seed # 从 db/seeds.rb 加载种子数据 rake db:setup # 创建数据库,加载模式,并使用种子数据进行初始化(使用 db:reset 也可以先删除数据库) rake db:structure:dump # 将数据库结构转储到 SQL 文件中 rake db:version # 检索当前模式版本号 rake doc:app # 为应用程序生成文档 -- 也可用 doc:rails, doc:guides, doc:plugins (options: TEMPLATE=/rdoc-template.rb, TITLE="Custom Title") rake erd # 根据您的模型生成实体关系图 rake log:clear # 将 log/ 中的所有 *.log 文件截断为零字节 rake middleware # 打印出你的 Rack 中间件堆栈 rake notes # 枚举所有注解(使用 notes:optimize, :fixme, :todo 获得焦点) rake notes:custom # 枚举自定义注解,使用 ANNOTATION=CUSTOM 指定 rake rails:template # 应用 LOCATION=/path/to/template 提供的模板 rake rails:update # 从 Rails 更新配置和 public/javascripts(或者只使用 update:javascripts 或 update:configs) rake routes # 按匹配顺序打印所有已定义的路由,并附上名称。 rake secret # 生成一个密码学安全的密钥(这通常用于为 cookie 会话生成一个秘密)。 rake spec # 运行规范目录中的所有规范(不包括插件规范) rake spec:acceptance # 运行 spec/acceptance 中的代码示例 rake spec:controllers # 运行 spec/controllers 中的代码示例 rake spec:helpers # 运行 spec/helpers 中的代码示例 rake spec:lib # 运行 spec/lib 中的代码示例 rake spec:mailers # 运行 spec/mailers 中的代码示例 rake spec:models # 运行 spec/models 中的代码示例 rake spec:rcov # 使用 rcov 运行所有规范 rake spec:requests # 运行 spec/requests 中的代码示例 rake spec:routing # 运行 spec/routing 中的代码示例 rake spec:views # 运行 spec/views 中的代码示例 rake stats # 从应用程序报告代码统计信息(KLOC 等) rake test # 一起运行 test:units, test:functionals, test:integration (也可用: test:benchmark, test:profile, test:plugins) rake test:recent # 运行最近的测试test:prepare / 测试最近的变化 rake test:uncommitted # 运行未提交的测试test:prepare / 测试自上次签入以来的更改(仅限 Subversion 和 Git) rake time:zones:all # 显示所有时区,也可用: time:zones:us, time:zones:local -- 使用 OFFSET 参数过滤,例如,OFFSET=-6 rake tmp:clear # 从 tmp/ 清除会话、缓存和套接字文件(窄 w/ tmp:sessions:clear, tmp:cache:clear, tmp:sockets:clear) rake tmp:create # 为会话、缓存、套接字和 pid 创建 tmp 目录

【问题讨论】:

当我运行 rake -T 时,它显示...你在运行什么轨道? 我使用 Rails 3.0.1。在具有两个不同项目的两个不同系统上。它不会出现在两个系统上(请参阅已编辑帖子中的完整输出)。 【参考方案1】:

没有描述的任务将不会显示。

编辑:看起来 DHH 从 Rails 3 中删除了一些任务的描述以“减少噪音”。 rake db:setup 有一个关于 db:reset 的注释。

http://github.com/rails/rails/commit/983815632cc1d316c7c803a47be28f1abe6698fb

【讨论】:

作为一个学习 Rails 的人,我浪费了很多时间来寻找与数据库迁移相关的 rake 任务的良好、清晰的文档。【参考方案2】:

您还可以使用rake db -T -A 显示所有任务,甚至是未注释的任务。作为参考,这些开关正在执行以下操作:

-T, --tasks [PATTERN]    Display the tasks (matching optional PATTERN) with 
                         descriptions, then exit.
-A, --all                Show all tasks, even uncommented ones (in combination 
                         with -T or -D)

【讨论】:

请注意,Rake 10 中添加了 -A(或 --all)选项。 rake -T -A 显示所有任务。 rake -T db -A 显示任务名称中包含db 的所有任务(注意db 之后 -T 的位置)。 也适用于 Capistrano 3:cap -T rails -A【参考方案3】:

您可以使用rake -P | grep rake 显示所有 Rake 任务的名称。

【讨论】:

这正是我所需要的。我用别名“raket”将它添加到我的 bash_profile 中: # 显示所有可用的 rake 任务,包括那些没有描述的任务。别名 raket="rake -P | grep rake" 效果很好。谢谢!【参考方案4】:

作为 Thomas Obermüller 回答的后续行动,由于 -T 标志采用位置参数,因此您只需要获取“db”命名空间任务(至少使用 rake 10.0.3):rake -T db -A

【讨论】:

【参考方案5】:

在WIKI - Ruby on Rails/ActiveRecord/Migrations 上,您可以找到更多信息。

【讨论】:

【参考方案6】:

对于 windows 用户,你可以这样做 rake -P |找到“耙子”

【讨论】:

以上是关于为啥 rake db:migrate:reset 未在 rake -T 中列出?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 rake assets:precompile 需要永远?

为啥 rake db:rollback 回滚三步?

rake 和 bin/rake 的区别

使用 bundle exec rake 还是只使用 rake?

在“rake test”之后执行 rake 任务

如何从 Rake 任务中运行 Rake 任务?