-
-
Save natevick/b4458670f9395de7d19a8e2d06894d9b to your computer and use it in GitHub Desktop.
Using pry-rails with Docker
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # First, add pry-rails to your Gemfile | |
| # https://github.com/rweng/pry-rails | |
| gem 'pry-rails', group: :development | |
| # Then you'll want to rebuild your Docker container to install the gems | |
| docker-compose build | |
| # You should now be able to add a break point anywhere in your code | |
| binding.pry | |
| # The problem is that Docker just kind of ignores it and moves on. | |
| # In order to actually halt execution and use pry as normal, you have to | |
| # these options to docker-compose.yml: | |
| app: | |
| tty: true | |
| stdin_open: true | |
| # Source: | |
| # http://stackoverflow.com/a/37264588/1042144 | |
| # https://github.com/docker/compose/issues/423#issuecomment-141995398 | |
| # The next time `binding.pry` is executed, the process should halt and display | |
| # an IRB-like console on the rails server screen. But you still can't use it | |
| # directly. You have to attach a terminal to the docker container. | |
| # In order to attach to a docker container, you need to know what its ID is. | |
| # Use `docker ps` to get a list of the running containers and their ids. | |
| docker ps | |
| # Source: https://www.liquidweb.com/kb/how-to-list-and-attach-to-docker-containers/ | |
| # Then you can use the numeric ID to attach to the docker instance: | |
| docker attach 75cde1ab8133 | |
| # It may not immediately show a rails console, but start typing and it should appear. | |
| # If you keep this attached, it should show the rails console prompt the next time you | |
| # hit the pry breakpoint. | |
| # Neat things you should try with pry: | |
| show-routes | |
| show-models | |
| show-source edit # If you're in a controller, for instance | |
| cd # Navigate up or down class hierarchies. try `cd BasicObject` | |
| ls # Check out what's inside of a class - variables, etc. | |
| # And of course you can access local variables just by typing their names. | |
| params | |
| #=> <ActionController::Parameters {"controller"=>"lists", "action"=>"index"} permitted: false> | |
| # To end your pry-rails session, you can type exit as you would exit any irb instance. | |
| exit | |
| # However, this does not detach the terminal from the docker container. This can be useful to | |
| # continue debugging. | |
| # Additionally, I had two terminals open, one to review the server log and one to attach to my container | |
| # to use pry-rails, but docker will timeout the server log while the attached terminal | |
| # continues to run the rails server process. I'm okay with that - I can just leave the terminal | |
| # attached. However, if you want to detach from the container without ending the process, you need to | |
| # press ctrl-p + ctrl-q. | |
| # http://stackoverflow.com/a/19689048/1042144 |
Author
Thanks @isabelatravaglia! That is definitely another great way to do it. Thanks for the kind words.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Hi! Thanks for the article "Rails Development with Docker". I've been using several of its configs on my app.
I just wanted to share that I've been using debug tools (byebug) using the command docker-compose run --service-ports web. I've found it on this website: https://blog.carbonfive.com/docker-rails-docker-compose-together-in-your-development-workflow/. It's quite handy because there's no need to go through the container attachment part.
Thanks!