ruby-on-rails - GitLab CI for Rails App 使用 Postgres 和 Elasticsearch (searchkick gem)

标签 ruby-on-rails postgresql elasticsearch gitlab-ci searchkick

当我将它推送到 GitLab 时,如何通过 searchkick gem 为依赖于 PosgreSQL 和 Elasticsearch 的 Rails 应用程序配置 .gitlab-ci.yml 文件以运行我的测试?

最佳答案

我想发布这个问题,因为我花了太长时间才找到答案并且不想让别人感受到我的痛苦。下面的示例不仅构建了我的应用程序,还运行了我的所有规范。

设置

  • Rails 5+
  • PostreSQL 9.6
  • Rspec gem
  • Searchkick gem(处理 Elasticsearch 查询和配置)

配置

使用列出的配置将以下文件添加到您的 Rails 应用。

config/gitlab-database.yml

test:
  adapter: postgresql
  encoding: unicode
  pool: 5
  timeout: 5000
  host: postgres
  database: test_db
  user: runner
  password: ""

.gitlab-ci.yml

image: ruby:2.4.1

services:
  - postgres:latest
  - elasticsearch:latest

variables:
  POSTGRES_DB: test_db
  POSTGRES_USER: runner
  POSTGRES_PASSWORD: ""
  ELASTICSEARCH_URL: "http://elasticsearch:9200"

stages:
  - test

before_script:
  - bundle install --without postgres production --jobs $(nproc) "${FLAGS[@]}"
  - cp config/gitlab-ci/gitlab-database.yml config/database.yml
  - RAILS_ENV=test bundle exec rails db:create db:schema:load

test: 
  stage: test
  script:
    - bundle exec rspec

就是这样!您现在已配置为在每次推送时在 gitlab 上自动运行您的规范。

进一步说明

让我们从 PostgreSQL 开始。当我们启动新的运行器时,我们正在复制的应用程序将不知道如何正确连接到 Postgres。因此,我们创建了一个新的 database.yml 文件,我们以 gitlab- 为前缀,这样它就不会与我们的实际配置冲突,并将该文件复制到运行器的配置目录中。 cp 命令不仅复制文件,而且会替换当前存在的文件。

我们通过 GitLab 连接的项目是 database:user:password:。我们通过在我们的环境变量中指定相同的名称来做到这一点,确保一切都正确连接。

好的,连接到 PostgreSQL 在 GitLab 的网站上有很好的解释和记录。那么我是如何让 Elasticsearch 工作的,这在任何地方都没有得到很好的解释?

魔术再次发生在变量中。我们需要设置 ELASTICSEARCH_URL 环境变量,它通过 Searchkick gem 提供给我们,因为 Elasticsearch 默认查找 http://localhost:9200。但是由于我们通过服务使用 Elasticsearch,我们需要明确告诉它不要使用默认值并使用我们服务的主机名。因此,我们随后将 http://localhost:9200 替换为 http://elasticsearch:9200,它确实正确映射到我们的服务。

关于ruby-on-rails - GitLab CI for Rails App 使用 Postgres 和 Elasticsearch (searchkick gem),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46242902/

相关文章:

ruby-on-rails - 如何捕获在富文本编辑器中输入的内容并将其保存在 Rails 模型中? - 羽毛笔丰富的编辑器

ruby-on-rails - 从gem继承一个类并添加本地方法

ruby-on-rails - factory_girl 未定义方法 `save!' 为

elasticsearch - 如何让 Elastic Search 聚合来镜像查询过滤逻辑?

elasticsearch:使用聚合值进行过滤

groovy - Elasticsearch-groovy批量请求

ruby-on-rails - Rails_admin 自定义 - 如何在自定义 Controller 中使用布局?

ruby-on-rails - 如何检查我的数组是否包含对象?

postgresql - Airflow dag 中 postgres_operator 的问题

sql - 如何使用 date_trunc 函数进行双周分组