I’m working on something new: an easy to set up Rails 5.1 development environment in Docker, configured via docker-compose. I’m maintaining a template for this on GitHub here:michiels/rails-docker-compose. Follow the README there for instructionson setting it up on your app.
Why?
Why am I doing this? I’d like all members in our team atFirmhouse to not have to think about local dependencies anymore when working on one of the many apps we develop. Getting set up with an app should be a matter of seconds.
Having a development environment per app also helps cleaning out any databases and Sidekiq queues and gem interdepencies. So you always have fresh and clean environment and you don’t have to recompile Ruby for each differeing version on your workstation.
What it contains:
I want to maintain the repository so it always supports a Rails development environment for:
- Latest Ruby on Rails
- Latest Ruby version
- PostgreSQL
- Redis (for Sidekiq)
- RubyGems for installing gems (standard Rails)
- Yarn for installing JS dependencies (standard Rails)
- System tests with headless Chrome
How does it work for your app?
You can read more detailed instructions in the README, but here’s the gist:
First, you copy over the Dockerfile, docker-compose.yml file and slightly modify your database.yml and docker-compose.yml.
Then, you set up the app’s database via:
$ docker-compose run --rm web rails db:setup
Finally, it’s super easy to start a local Rails development environment:
$ docker-compose up
Browse to http://localhost:3000/ and your app is up and running with Rails, PostgreSQL, Redis, and Sidekiq.
Bonus hint: Keep a local development session open for generating controllers and models, and running migrations and tests. For example:
$ bin/devconsole
# rails g controller homepage
# rails db:migrate
# rails test
# rails test:system
Try it, please!
I’d love to see this set up work in your app. Let me know if it works out or what doesn’t.
Top comments (10)
This is fantastic!
suggestion => don't use Ruby 2.5 (yet), there are still some gems out there with compatibility issue with 2.5, chief among them being devise.
I'm sure this will get fixed in the (very) near future but just a suggestion.
Thanks Drew! Very late reply, but we've been using Ruby 2.5 in our Docker setup successfully for the past few months. So everything seems nice!
Awesome!
How does this setup support system tests with headless chrome? Are they run on host?
System tests are run inside the container. Headless chrome is installed inside the container. So you can just open the shell in the container and run:
I'm guessing it and
bin/devconsole
come fromrailsdockercompose_web
but I can't pull it:Status: Downloaded newer image for redis:latest
Pulling sidekiq (railsdockercompose_web:latest)...
ERROR: pull access denied for railsdockercompose_web, repository does not exist or may require 'docker login'
I searched for it on hub.docker.com but didn't get any results.
Just wasn't seeing where headless chrome was being installed. Couldn't see it in the Dockerfile or in compose. Am I missing something?
I forgot to push some commits after publishing the post. The latest master is updated with everything fixed from your previous comments.
Everything is in the local repo. You could also specify an "image" in docker-compose.yml if you intend to build/push your repo to a Docker CI.
However, the latest docker-compose.yml is for local standalone development that doesn't depend on a container image hosted somewhere else.
Brilliant. I will try this.
+1
Nice! I’m available for questions, help, or improvements!