如何运行与水豚&poltergeistdocker集装箱内的function规格

我有一个ruby轨道5应用程序,我写了一些function规格,利用capybarapoltergeist 。 他们自己运行的很好 – 但是,当我在docker集装箱内运行它们时,它们爆炸得非常壮观。 在Docker方面我相当绿色,而且在弄清楚如何自己debugging的时候,我有些迷失了方向。 我发现了一些利用selenium但不与capybara结合的资源。

这里有一些configuration文件:

Dockerfile

 FROM ruby:2.4.1 ENV DIR=/app \ BUNDLE_JOBS=4 \ PHANTOMJS=phantomjs-2.1.1-linux-x86_64 RUN apt-get update -qq && apt-get upgrade -y && apt-get install -y build-essential libpq-dev nodejs ADD https://bitbucket.org/ariya/phantomjs/downloads/$PHANTOMJS.tar.bz2 / RUN mv ./$PHANTOMJS/bin/phantomjs /usr/local/bin RUN rm -rf ./$PHANTOMJS RUN phantomjs --version RUN mkdir $DIR WORKDIR $DIR ADD Gemfile $DIR/Gemfile ADD Gemfile.lock $DIR/Gemfile.lock RUN bundle install ADD . $DIR EXPOSE 3000 ADD docker-entrypoint.sh /entrypoint.sh ENTRYPOINT ["/entrypoint.sh"] CMD bundle exec rails s -p 3000 -b 0.0.0.0 

泊坞窗,compose.yml

 version: "2" services: db: image: postgres env_file: - docker.env app: build: . links: - db:db ports: - "3000:3000" depends_on: - db env_file: - docker.env volumes: - .:/app command: bundle exec rails s -p 3000 -b '0.0.0.0' 

rails_helper.rb

 docker_ip = %x(/sbin/ip route|awk '/default/ { print $3 }').strip Capybara.register_driver :poltergeist_debug do |app| Capybara::Poltergeist::Driver.new( app, debug: true, js_errors: true, host: docker_ip) end # Capybara.javascript_driver = :poltergeist Capybara.javascript_driver = :poltergeist_debug Capybara.app_host = "http://#{docker_ip}:3000" Capybara.server_host = '0.0.0.0' Capybara.server_port = '3000' 

每当我运行docker-compose run --rm -e "RAILS_ENV=test" app rspec容器内的function规格docker-compose run --rm -e "RAILS_ENV=test" app rspec ,我通常会出现以下错误:

 36) BookPolicy show? permits non-admins Failure/Error: TCPServer.open(custom_host || HOST, port || 0).tap do |server| @port = server.addr[1] @host = server.addr[2] end Errno::EADDRNOTAVAIL: Cannot assign requested address - bind(2) for "172.19.0.1" port 0 # /usr/local/bundle/gems/poltergeist-1.15.0/lib/capybara/poltergeist/web_socket_server.rb:34:in `initialize' # /usr/local/bundle/gems/poltergeist-1.15.0/lib/capybara/poltergeist/web_socket_server.rb:34:in `open' # /usr/local/bundle/gems/poltergeist-1.15.0/lib/capybara/poltergeist/web_socket_server.rb:34:in `start_server' # /usr/local/bundle/gems/poltergeist-1.15.0/lib/capybara/poltergeist/web_socket_server.rb:26:in `initialize' # /usr/local/bundle/gems/poltergeist-1.15.0/lib/capybara/poltergeist/server.rb:25:in `new' # /usr/local/bundle/gems/poltergeist-1.15.0/lib/capybara/poltergeist/server.rb:25:in `start' # /usr/local/bundle/gems/poltergeist-1.15.0/lib/capybara/poltergeist/server.rb:9:in `initialize' # /usr/local/bundle/gems/poltergeist-1.15.0/lib/capybara/poltergeist/driver.rb:40:in `new' # /usr/local/bundle/gems/poltergeist-1.15.0/lib/capybara/poltergeist/driver.rb:40:in `server' # /usr/local/bundle/gems/poltergeist-1.15.0/lib/capybara/poltergeist/driver.rb:25:in `browser' # /usr/local/bundle/gems/poltergeist-1.15.0/lib/capybara/poltergeist/driver.rb:184:in `reset!' # /usr/local/bundle/gems/capybara-2.14.4/lib/capybara/session.rb:127:in `reset!' # /usr/local/bundle/gems/capybara-2.14.4/lib/capybara.rb:314:in `block in reset_sessions!' # /usr/local/bundle/gems/capybara-2.14.4/lib/capybara.rb:314:in `reverse_each' # /usr/local/bundle/gems/capybara-2.14.4/lib/capybara.rb:314:in `reset_sessions!' # /usr/local/bundle/gems/capybara-2.14.4/lib/capybara/rspec.rb:22:in `block (2 levels) in <top (required)>' 

那么我做错了什么? 任何帮助表示赞赏。


更新#1:我删除了hostconfiguration设置poltergeist驱动程序。 新的rails_helper.rbconfiguration如下所示:

 docker_ip = %x(/sbin/ip route|awk '/default/ { print $3 }').strip Capybara.register_driver :poltergeist_debug do |app| Capybara::Poltergeist::Driver.new( app, debug: true, js_errors: true) end 

我现在得到以下错误:

1)pipe理员可以通过页面编辑链接更新段落页面翻译失败/错误:访问book_cover_path(book)

 Capybara::Poltergeist::StatusFailError: Request to 'http://172.19.0.1:36827/books/the-heart-is-deceitful-above-all-things/cover' failed to reach server, check DNS and/or server status # /usr/local/bundle/gems/poltergeist-1.15.0/lib/capybara/poltergeist/browser.rb:377:in `command' # /usr/local/bundle/gems/poltergeist-1.15.0/lib/capybara/poltergeist/browser.rb:36:in `visit' # /usr/local/bundle/gems/poltergeist-1.15.0/lib/capybara/poltergeist/driver.rb:97:in `visit' # /usr/local/bundle/gems/capybara-2.14.4/lib/capybara/session.rb:269:in `visit' # /usr/local/bundle/gems/capybara-2.14.4/lib/capybara/dsl.rb:50:in `block (2 levels) in <module:DSL>' # ./spec/features/passage_mode_spec.rb:13:in `block (2 levels) in <top (required)>' 

…所以现在phantomjs无法到达服务器,即使它使用正确的IP地址和我在Dockerfiledocker-compose.yml公开的端口。