Jak*_*son 4 postgresql ruby-on-rails elasticsearch gitlab-ci searchkick
.gitlab-ci.yml当我将它推送到 GitLab 时,如何通过 searchkick gem 为依赖于 PosgreSQL 和 Elasticsearch 的 Rails 应用程序配置文件以运行我的测试?
我想发布这个问题,因为我花了太长时间才找到答案并且不想让其他人感受到我的痛苦。下面的示例不仅构建了我的应用程序,还运行了我的所有规范。
使用列出的配置将以下文件添加到您的 Rails 应用程序。
配置/gitlab-database.yml
test:
adapter: postgresql
encoding: unicode
pool: 5
timeout: 5000
host: postgres
database: test_db
user: runner
password: ""
Run Code Online (Sandbox Code Playgroud)
.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
Run Code Online (Sandbox Code Playgroud)
就是这样!您现在已配置为每次推送时在 gitlab 上自动运行您的规范。
让我们从 PostgreSQL 开始。当我们启动我们的新运行器时,我们正在复制的应用程序将不知道如何正确连接到 Postgres。因此,我们创建了一个新database.yml文件,我们为其添加前缀,gitlab-因此它不会与我们的实际配置冲突,并将该文件复制到运行程序的 config 目录中。该cp命令不仅复制文件,而且将替换当前存在的文件。
我们通过GitLab连接的项目是database:,user:和password:。我们通过在我们的环境中指定这些相同的名称来做到这一点variables,确保一切都正确连接。
好的,GitLab 的网站上对连接 PostgreSQL 进行了很好的解释和记录。那么我是如何让 Elasticsearch 工作的,这在任何地方都没有得到很好的解释?
魔法再次发生在variables. 我们需要设置ELASTICSEARCH_URL环境变量,通过 Searchkick gem 提供给我们,因为 Elasticsearchhttp://localhost:9200默认查找。但是由于我们通过服务使用 Elasticsearch,我们需要明确告诉它不要使用默认值并使用我们服务的主机名。所以我们然后替换http://localhost:9200为http://elasticsearch:9200,它确实正确映射到我们的服务。