Circle CI 2.0 Rails Redis Resque - 找不到Rspec Redis服务器错误

问题描述 投票:3回答:2

当我们的测试套件运行时,我们遇到了关于redis-server的以下问题。无论我们尝试过什么,似乎没有任何东西可以通过这个错误。我们通过dockerize验证了容器是通过等待实现的,如下所示,但仍然会出现此错误。

任何想法将不胜感激!

enter image description here

福利初始化

require 'resque'
require 'redis'
require 'yaml'

# Resque Plugins
require 'resque/plugins/retry'
require 'resque-retry'
require 'resque-retry/server'
require 'resque-lock-timeout'
require 'resque-scheduler'
require 'resque/failure/multiple'
require 'resque/failure/redis'
require 'resque-job-stats/server'
require 'resque/rollbar'

if AppUnsecure.settings[:active_db_services].include?('redis')
  uri = URI.parse(ENV["REDIS_URL"])
  config = {
    host: uri.host,
    port: uri.port,
    password: uri.password
  }
  Resque::Failure::Multiple.classes = [ Resque::Failure::Redis, Resque::Failure::Rollbar ]
  Resque::Failure.backend = Resque::Failure::Multiple
  Resque.redis = Redis.new(config)
elsif AppUnsecure.settings[:active_db_services].include?('redis-continous-integration')
  Resque::Failure::MultipleWithRetrySuppression.classes = [Resque::Failure::Redis]
  Resque.redis = Redis.new(host: 'redis://localhost', port: 6391)
else
  Resque::Failure::MultipleWithRetrySuppression.classes = [Resque::Failure::Redis]
  Resque.redis = Redis.new
end

Resque.redis.namespace = 'resque:GathrlySmartforms'

# Ignores Resque when processing jobs if activated!
Resque.inline = true if AppUnsecure.settings[:process_redis_inline]

# Setup Scheduler
# https://github.com/resque/resque-scheduler/issues/118
# https://github.com/resque/resque-scheduler/issues/581
Resque::Scheduler.configure do |c|
  c.quiet = false
  c.verbose = false
  c.logfile = File.join(Rails.root, 'log', "#{Rails.env}_resque_scheduler.log")
  c.logformat = 'text'
end
Resque::Scheduler.dynamic = true

schedules = {}
global = YAML.load_file("#{Rails.root}/config/resque_schedule.yml")
schedules.merge!(global) if global
# http://stackoverflow.com/questions/12158226/how-do-i-skip-loading-of-rails-initializers-when-running-a-rake-task
unless defined?(is_running_migration?) && is_running_migration?
  Resque.schedule = schedules if schedules.present?
end

Resque::Server.class_eval do
  use Rack::Auth::Basic do |username, password|
    [username, password] == [Rails.application.secrets.my_resque_username, Rails.application.secrets.my_resque_password]
  end
end

圆形配置

version: 2
jobs:
  build:
    working_directory: ~/DIR_NAME
    docker:
      - image: circleci/ruby:2.4.1-node
        environment:
          RAILS_ENV: continous_integration
          PGHOST: 127.0.0.1
          PGUSER: rails_test_user

      - image: circleci/postgres:9.6.3-alpine
        environment:
          POSTGRES_USER: rails_test_user
          POSTGRES_PASSWORD: ""
          POSTGRES_DB: continous_integration

      - image: redis:4.0.6

    steps:
      - checkout

      - run:
          name: Dockerize v0.6.0
          command: |
            wget https://github.com/jwilder/dockerize/releases/download/v0.6.0/dockerize-linux-amd64-v0.6.0.tar.gz
            sudo rm -rf /usr/local/bin/dockerize
            sudo tar -C /usr/local/bin -xzvf dockerize-linux-amd64-v0.6.0.tar.gz
            rm dockerize-linux-amd64-v0.6.0.tar.gz

      - run:
          name: Wait for PG
          command: dockerize -wait tcp://localhost:5432 -timeout 2m

      - run:
          name: Wait for Redis
          command: |
            dockerize -wait tcp://localhost:6379 -timeout 2m

      - restore_cache:
          keys:
            - DIR_NAME-{{ checksum "Gemfile.lock" }}
            - DIR_NAME-

      - save_cache:
          key: rails-demo-{{ checksum "Gemfile.lock" }}
          paths:
            - vendor/bundle

      - run:
          name: Setup Bundler and Gems
          command: |
            gem install bundler
            gem update bundler
            gem install brakeman
            gem install rubocop
            gem install rubocop-rspec
            gem install scss_lint
            gem install eslint-rails
            gem install execjs
            bundle config without development:test
            bundle check --path=vendor/bundle || bundle install --without development test --path=vendor/bundle --jobs 4 --retry 3

      - run:
          name: Install Phantom Js
          command: |
            sudo curl --output /tmp/phantomjs https://s3.amazonaws.com/circle-downloads/phantomjs-2.1.1
            sudo chmod ugo+x /tmp/phantomjs
            sudo ln -sf /tmp/phantomjs /usr/local/bin/phantomjs

      - run:
          name: Install Postgres Tools
          command: |
            sudo apt-get update
            sudo apt-get install postgresql-client

      - run:
          name: Install Redis Tools
          command: |
            sudo apt-get install redis-tools ; while ! redis-cli ping 2>/dev/null ; do sleep 1 ; done

      - run:
          name: Build Rails Database Yaml
          command: |
            cp config/database_example.yml config/database.yml

      - run:
          name: Setup Rails Database
          command: |
            bundle exec rake db:drop
            bundle exec rake db:setup

      - run:
          name: Run Rspec
          timeout: 60
          command: |
            RAILS_ENV=continous_integration bundle exec rspec --format RspecJunitFormatter -o /tmp/test-results/rspec.xml

      - run:
          name: Run Brakeman
          command: |
            brakeman -z

      - run:
          name: Run Rubocop
          command: |
            bundle exec rubocop --format fuubar --require rubocop-rspec --config .rubocop.yml

      - run:
          name: Run the SCSS Linter
          command: |
            bundle exec scss-lint --config=config/scsslint.yml

      - run:
          name: Run the Eslint Linter for JS
          command: |
            bundle exec rake eslint:run_all


      - store_test_results:
          path: /tmp/test-results

UPDATE

在各种测试运行中,它偶尔可以工作......但是,错误仍然是相同的,这一定是原因......

enter image description here

ruby-on-rails ruby docker redis circleci
2个回答
0
投票

我不知道Postgres连接到redis精确意味着什么。 postgres用户喜欢通过redis-cli? Postgres是不是直接连接的呢? (外国数据包装 - 只是读到这个...我甚至不知道你能做到这一点,哇)。嗯,没关系,那是一种切线......

一些小的见解,我不能很容易地测试这整个事情... PID文件不是那可能是因为它只是死亡。 kill: invalid argument Q可能来自做kill -QUIT的事情。这可能是redis的脚本或其他东西。我敢打赌,这个过程已经死了,杀人只是出错了。我认为kill真的希望PID存在。虽然我刚测试了这个,但这不是这个如何工作的。那么Circle可能安装了非GNU coreutils吗?

我不认为POSTGRES_USER应该在redis图像中。看到这个例子:https://discuss.circleci.com/t/circleci-bug-for-builds-with-redis/13124看起来2.0的变化。

如果要点已更新为全新的配置,请更新错误消息和问题,除非它是相同的。


0
投票

根据我们从这里可以看出的情况,您的配置似乎引用了测试中不存在的redis进程。

你也没有经过测试捆绑。不知道为什么。

你可以发布你的Redis配置文件吗? < - 仍然需要这个。

您需要将REDIS_URL配置为docker镜像。

© www.soinside.com 2019 - 2024. All rights reserved.