# Rake tasks for developers

> 原文：[https://docs.gitlab.com/ee/development/rake_tasks.html](https://docs.gitlab.com/ee/development/rake_tasks.html)

*   [Set up database with developer seeds](#set-up-database-with-developer-seeds)
    *   [Environment variables](#environment-variables)
    *   [Seeding issues for all or a given project](#seeding-issues-for-all-or-a-given-project)
        *   [Seeding issues for Insights charts](#seeding-issues-for-insights-charts-ultimate)
        *   [Seeding groups with sub-groups](#seeding-groups-with-sub-groups)
        *   [Seeding custom metrics for the monitoring dashboard](#seeding-custom-metrics-for-the-monitoring-dashboard)
    *   [Automation](#automation)
    *   [Discard `stdout`](#discard-stdout)
    *   [Extra Project seed options](#extra-project-seed-options)
*   [Run tests](#run-tests)
    *   [Speed up tests, Rake tasks, and migrations](#speed-up-tests-rake-tasks-and-migrations)
*   [Compile Frontend Assets](#compile-frontend-assets)
*   [Emoji tasks](#emoji-tasks)
*   [Update project templates](#update-project-templates)
*   [Generate route lists](#generate-route-lists)
*   [Show obsolete `ignored_columns`](#show-obsolete-ignored_columns)
*   [Update GraphQL documentation and schema definitions](#update-graphql-documentation-and-schema-definitions)
    *   [Update machine-readable schema files](#update-machine-readable-schema-files)

# Rake tasks for developers[](#rake-tasks-for-developers "Permalink")

Rake 任务适用于开发人员和为 GitLab 做出贡献的其他人员.

## Set up database with developer seeds[](#set-up-database-with-developer-seeds "Permalink")

请注意，如果您的数据库用户没有高级特权，则必须在运行此命令之前手动创建数据库.

```
bundle exec rake setup 
```

`setup`任务是`gitlab:setup`的别名. 此任务调用`db:reset`创建数据库，并调用`db:seed_fu`播种数据库. 注意： `db:setup`调用`db:seed`但这没有任何作用.

### Environment variables[](#environment-variables "Permalink")

**MASS_INSERT** ：创建数百万个用户（2m），项目（5m）及其关系. 强烈建议将种子与种子一起运行，以在开发过程中捕获缓慢的查询. 预计此过程最多可能需要 20 分钟.

另请参见[批量插入 Rails 模型](mass_insert.html) .

**LARGE_PROJECTS** ：从一组预定义的 URL 创建大型项目（通过导入）.

### Seeding issues for all or a given project[](#seeding-issues-for-all-or-a-given-project "Permalink")

您可以使用`gitlab:seed:issues`任务为所有项目或给定项目`gitlab:seed:issues` ：

```
# All projects
bin/rake gitlab:seed:issues

# A specific project
bin/rake "gitlab:seed:issues[group-path/project-path]" 
```

默认情况下，每个项目的最近 5 周平均每周播种 2 个问题.

#### Seeding issues for Insights charts[](#seeding-issues-for-insights-charts-ultimate "Permalink")

您可以使用`gitlab:seed:insights:issues`任务为专门用于处理[Insights 图表](../user/group/insights/index.html)的`gitlab:seed:insights:issues` ：

```
# All projects
bin/rake gitlab:seed:insights:issues

# A specific project
bin/rake "gitlab:seed:insights:issues[group-path/project-path]" 
```

默认情况下，每个项目在最近 52 周中平均每周播种 10 个问题. 所有问题还将随机标记团队，类型，严重性和优先级.

#### Seeding groups with sub-groups[](#seeding-groups-with-sub-groups "Permalink")

您可以使用`gitlab:seed:group_seed`任务为包含里程碑/项目/问题的子组播种组：

```
bin/rake "gitlab:seed:group_seed[subgroup_depth, username]" 
```

如果 GitLab 实例具有可用的史诗功能，则该组还会另外添加史诗.

#### Seeding custom metrics for the monitoring dashboard[](#seeding-custom-metrics-for-the-monitoring-dashboard "Permalink")

监视仪表板中支持许多不同类型的指标.

要导入这些指标，可以运行：

```
bundle exec rake 'gitlab:seed:development_metrics[your_project_id]' 
```

### Automation[](#automation "Permalink")

If you’re very sure that you want to **清除当前数据库** and refill seeds, you could:

```
echo 'yes' | bundle exec rake setup 
```

使您免于手动回答`yes` .

### Discard `stdout`[](#discard-stdout "Permalink")

由于该脚本会打印很多信息，因此可能会减慢您的终端运行速度，并且如果您将其重定向到文件，则会生成 20G 以上的日志. 如果我们不在乎输出，则可以将其重定向到`/dev/null` ：

```
echo 'yes' | bundle exec rake setup > /dev/null 
```

请注意，由于您看不到`stdout`的问题，因此您可能只想`echo 'yes'`以使其运行. 它仍然会在`stderr`上打印错误，因此不必担心丢失错误.

### Extra Project seed options[](#extra-project-seed-options "Permalink")

您可以传递一些环境标志来更改项目的种子方式

*   `SIZE` ：默认为`8` ，最大为`32` . 要创建的项目数量.
*   `LARGE_PROJECTS` ：默认为 false. 如果设置，将克隆 6 个大型项目以帮助进行测试.
*   `FORK` ：默认为 false. 如果设置为`true`将分叉`torvalds/linux`五次. 也可以将其设置为现有项目 full_path，它将代替它.

## Run tests[](#run-tests "Permalink")

为了运行测试，您可以使用以下命令：

*   `bin/rake spec`运行 RSpec 套件
*   `bin/rake spec:unit`仅运行单元测试
*   `bin/rake spec:integration`仅运行集成测试
*   `bin/rake spec:system`仅运行系统测试
*   `bin/rake karma`运行 Karma 测试套件

`bin/rake spec`需要花费大量时间. 无需在本地运行完整的测试套件，而是可以通过运行与更改相关的单个测试或目录来节省大量时间. 提交合并请求后，CI 将为您运行完整的测试套件. 合并请求中的绿色 CI 状态表示已通过完整的测试套件.

您不能运行`rspec .` 因为这将尝试运行它可以找到的所有`_spec.rb`文件，以及`/tmp`

您可以将 RSpec 命令行选项传递给`spec:unit` ， `spec:integration`和`spec:system`任务. 例如， `bin/rake "spec:unit[--tag ~geo --dry-run]"` .

对于 RSpec 测试，要运行一个测试文件，可以运行：

```
bin/rspec spec/controllers/commit_controller_spec.rb 
```

要在一个目录中运行多个测试：

*   如果仅想测试 API，则对 RSpec 测试使用`bin/rspec spec/requests/api/`

### Speed up tests, Rake tasks, and migrations[](#speed-up-tests-rake-tasks-and-migrations "Permalink")

[Spring](https://github.com/rails/spring)是 Rails 应用程序的预加载器. 它通过使应用程序在后台运行来加快开发速度，因此您无需在每次运行测试，Rake 任务或迁移时都启动它.

如果要使用它，则需要将`ENABLE_SPRING`环境变量导出为`1` ：

```
export ENABLE_SPRING=1 
```

另外，您可以在每次运行规范时使用以下命令，

```
bundle exec spring rspec some_spec.rb 
```

## Compile Frontend Assets[](#compile-frontend-assets "Permalink")

您永远不需要在开发中手动编译前端资产，但是如果您需要测试在生产环境中如何编译资产，则可以使用以下命令进行：

```
RAILS_ENV=production NODE_ENV=production bundle exec rake gitlab:assets:compile 
```

这将编译并缩小所有 JavaScript 和 CSS 资产，并将它们与所有其他前端资产（图像，字体等）一起复制到`/public/assets`中，以便于对其进行轻松检查.

## Emoji tasks[](#emoji-tasks "Permalink")

要更新表情符号别名文件（用于表情符号自动完成），请运行以下命令：

```
bundle exec rake gemojione:aliases 
```

要更新表情符号摘要文件（用于表情符号自动完成），请运行以下命令：

```
bundle exec rake gemojione:digests 
```

这将根据当前可用的表情`fixtures/emojis/digests.json`更新`fixtures/emojis/digests.json`文件.

要生成包含所有表情符号的 Sprite 文件，请运行：

```
bundle exec rake gemojione:sprite 
```

如果添加了新的表情符号，则子画面可能会更改大小. 为了补偿这种变化，请首先使用上述 Rake 任务生成`emoji.png` Sprite 表，然后检查新 Sprite 表的`SPRITESHEET_WIDTH`并`SPRITESHEET_HEIGHT`地更新`SPRITESHEET_WIDTH`和`SPRITESHEET_HEIGHT`常量.

## Update project templates[](#update-project-templates "Permalink")

从模板启动项目需要将该项目导出. 在最新的 master 分支上运行：

```
gdk start
bundle exec rake gitlab:update_project_templates
git checkout -b update-project-templates
git add vendor/project_templates
git commit
git push -u origin update-project-templates 
```

现在创建一个合并请求并将其合并到主请求.

## Generate route lists[](#generate-route-lists "Permalink")

要查看 API 路由的完整列表，可以运行：

```
bundle exec rake grape:path_helpers 
```

生成的列表包括 API 端点和功能性 RESTful API 动词的完整列表.

对于 Rails 控制器，运行：

```
bundle exec rake routes 
```

由于创建这些文件需要一些时间，因此将输出保存到文件以快速参考通常会很有帮助.

## Show obsolete `ignored_columns`[](#show-obsolete-ignored_columns "Permalink")

要查看所有已过时的`ignored_columns`的列表， `ignored_columns`运行：

```
bundle exec rake db:obsolete_ignored_columns 
```

随时从自己的`ignored_columns`定义中删除其定义.

## Update GraphQL documentation and schema definitions[](#update-graphql-documentation-and-schema-definitions "Permalink")

要基于 GitLab 模式生成 GraphQL 文档，请运行：

```
bundle exec rake gitlab:graphql:compile_docs 
```

在当前状态下，Rake 任务：

*   生成 GraphQL 对象的输出.
*   将输出放置在`doc/api/graphql/reference/index.md` .

这使用了来自`graphql-docs` gem 的一些功能，例如其模式解析器和帮助器方法. docs 生成器代码来自于我们，为我们提供了更大的灵活性，例如使用 Haml 模板和生成 Markdown 文件.

要编辑使用的模板，请查看`lib/gitlab/graphql/docs/templates/default.md.haml` . 实际的渲染器位于`Gitlab::Graphql::Docs::Renderer` .

`@parsed_schema`是`graphql-docs` gem 期望提供的实例变量. `Gitlab::Graphql::Docs::Helper`定义我们当前使用的`object`方法. 您还应该在这里为要显示的新类型实现任何新方法.

### Update machine-readable schema files[](#update-machine-readable-schema-files "Permalink")

要基于 GitLab 模式生成 GraphQL 模式文件，请运行：

```
bundle exec rake gitlab:graphql:schema:dump 
```

它使用 GraphQL Ruby 的内置 Rake 任务来生成[IDL](https://www.prisma.io/blog/graphql-sdl-schema-definition-language-6755bcb9ce51)和 JSON 格式的文件.