5

I use

  • Rail 4.2.5.1 running witin container
  • Ruby 2.3.1 running wit container

When I start

 $ docker-compose exec web /bin/bash # ssh into the web server
 $ bundle exec rails c 

I got the following error.

from /usr/local/lib/ruby/gems/2.3.0/gems/bundler-1.13.1/lib/bundler/runtime.rb:86:in `each'
    from /usr/local/lib/ruby/gems/2.3.0/gems/bundler-1.13.1/lib/bundler/runtime.rb:86:in `block in require'
    from /usr/local/lib/ruby/gems/2.3.0/gems/bundler-1.13.1/lib/bundler/runtime.rb:75:in `each'
    from /usr/local/lib/ruby/gems/2.3.0/gems/bundler-1.13.1/lib/bundler/runtime.rb:75:in `require'
    from /usr/local/lib/ruby/gems/2.3.0/gems/bundler-1.13.1/lib/bundler.rb:106:in `require'
    from /usr/src/app/config/application.rb:7:in `<top (required)>'
    from /usr/local/bundle/gems/spring-1.7.2/lib/spring/application.rb:82:in `require'
    from /usr/local/bundle/gems/spring-1.7.2/lib/spring/application.rb:82:in `preload'
    from /usr/local/bundle/gems/spring-1.7.2/lib/spring/application.rb:143:in `serve'
    from /usr/local/bundle/gems/spring-1.7.2/lib/spring/application.rb:131:in `block in run'
    from /usr/local/bundle/gems/spring-1.7.2/lib/spring/application.rb:125:in `loop'
    from /usr/local/bundle/gems/spring-1.7.2/lib/spring/application.rb:125:in `run'
    from /usr/local/bundle/gems/spring-1.7.2/lib/spring/application/boot.rb:19:in `<top (required)>'
    from /usr/local/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from /usr/local/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'

However I already put pq gem in Gemfile. And I already tried following,

$ bundle update pg
$ bundle uninstall pg && bundle install
$ bundle exec spring binstub --all

However I got the no luck.

When I tried,

$ docker-compose exec web /bin/bash # ssh into the web server
$ DISABLE_SPRING=1 bundle exec rails c

It does work. So I think spring gem does not work correctly. Also If I do the same thing locally, it does work though.

I think my docker_compose.yml is not set up correctly. Any ideas?

docker-compose.yml

  web:
    depends_on:
      - 'postgres'
      - 'redis'
    build: .
    command: rails server -b 0.0.0.0
    ports:
      - '3000:3000'
    volumes:
      - '.:/usr/src/app'
    env_file:
      - '.env'

  postgres:
    image: 'postgres:9.4.4'
    environment:
      POSTGRES_USER: 'postgres'
    ports:
      - '5432:5432'

  redis:
    image: 'redis:3.2-alpine'
    command: redis-server
    ports:
      - '6379:6379'

  worker:
    depends_on:
      - 'postgres'
      - 'redis'
    build: .
    command: bundle exec sidekiq -C config/sidekiq.yml.erb 
    volumes:
      - '.:/usr/src/app'
    env_file:
      - '.env'
Boris Treukhov
  • 17,493
  • 9
  • 70
  • 91
Toshi
  • 6,012
  • 8
  • 35
  • 58

1 Answers1

0

Invoke the app inside the container via bin/spring:

$ docker-compose exec web bash
$ bin/spring rails c

Same goes for running tests, etc.:

$ bin/spring rspec

Run spring alone for some extra hints:

$ bin/spring

I tested this with Ruby 2.4.3, Rails 5.1.4, and Spring 2.0.2.

Dogweather
  • 15,512
  • 17
  • 62
  • 81