I use rails 7 these days with ruby 3.0 in a containerized app using docker-compose. The problem buzzing me a lot was debugging the app in localhost. Yes, you can debug RSpec when you run the RSpec in the docker run
command, but what about direct debugging on the local server?
Rails 7 has a built-in debug gem, and my target was to use this gem, not the old ones like debase, pry, etc.
The problem with docker-compose is that we can log or do console or even do RSpec give input option and system stops while doing RSpec, but rails server starts when we call up
on compose, and then we can see logs not control it.
Solution:
In docker-compose, in rails service, write:
web:
...
stdin_open: true
tty: true
stdin_open: true
in a docker-compose.yml
file means that the container will have an open STDIN
stream when it is run. This allows you to send input to the container over its STDIN
stream, which can be useful in certain situations.
For example, you might use stdin_open: true
when running an interactive command-line application in a container to type commands into the container and see the output.
tty: true
in a docker-compose.yml
file means that the container will have a "pseudo-tty" when it is run. This allows you to interact with the container in a way that is similar to a terminal session.
When a container is run with a pseudo-tty, you can send input to the container using your keyboard, and the container’s output will be displayed in your terminal. This can be useful when running interactive command-line applications in a container.
Now, after running docker-compose up
, you write in the new terminal session docker container ls
to find the name of the rails container and then write docker attach container_name
and now add debugger
to your process and when that process run in docker then rdbg
will stop at that point and now you can debug the application. Use c
to continue to the next breakpoint.
docker container ls
docker attach container_name
To get out of the attached container session, press Ctrl+P
and then Ctrl+Q
.
Happy Coding!
Top comments (0)