Circle CI 2.0 Rails Redis Resque – Rspec Redis Server Not Found错误

当我们的testing套件运行时,我们得到了关于redis-server的以下问题。 无论我们尝试了什么,似乎没有什么能够超越这个错误。 我们已经通过dockerizevalidation了容器是否正在等待,如下所示,但是这个错误仍然存​​在。

任何想法将不胜感激!

在这里输入图像说明

Resque初始化程序

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 

圆形configuration

 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

在各种testing运行,它可能偶尔工作…但是,错误仍然是一样的,这一定是原因…

在这里输入图像说明

我不知道Postgres连接到redis的意思究竟是什么意思。 postgres用户喜欢通过redis-cli? Postgres不是直接连接的吗? (外国的数据封装 – 只是读了这个…我甚至不知道你可以这样做,哇)。 那么,不要介意,这是一个切线…

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

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

如果要点更新为全新configuration,则更新错误消息和问题,除非相同。

根据我们从这里可以看出,似乎你的configuration引用了一个在testing中不存在的redis进程。

你也没有testing捆绑。 不知道为什么。

你可以发布你的Redisconfiguration文件吗? < – 仍然需要这个。

您需要将REDIS_URLconfiguration为泊坞窗图像。