Ruby on Rails and Docker¶
tags: [ror, rails, docker, container]
bundler “/ is not writable”¶
$ docker exec -it simple_cms_rails_1 \
bin/rails generate controller Subjects index show new edit delete
`/` is not writable.
Bundler will use `/tmp/bundler20210424-45-3hj1l45' as your home directory temporarily.
Running via Spring preloader in process 63
...rest of the output...
Another side effect is that files become un-writable for the developer on the host machine.
The problem is that running docker with user with same uid:gid of host machine causes problems because that user has no name and no home inside the container. Seems like this solves it:
#
# Dockerfile.rails.dev
#
RUN useradd \
--create-home \
--home-dir /usr/src/app \
--shell /bin/bash \
--groups sudo,root \
--uid 1000 \
devel
Then, of course, we need to run migrations, then we should be able to run tests:
$ docker exec -it search-repos_api_1 bash
root@081715d7c20b:/usr/src/app# bin/rails db:migrate RAILS_ENV=test
root@081715d7c20b:/usr/src/app# exit
$ docker exec -it search-repos_api_1 bin/rails test
Can’t run tests¶
$ docker exec -it search-repos_api_1 bin/rails test
Running via Spring preloader in process 36
<redacted>/active_record/connection_adapters/postgresql_adapter.rb:81:in
`rescue in new_client':
FATAL: database "api_test" does not exist (ActiveRecord::NoDatabaseError)
That is easy! Run:
$ docker exec -it search-repos_api_1 rake db:test:prepare
$ docker exec -it search-repos_api_1 bin/rails test