Как отладить приложение rails в докере с pry?
У меня есть приложение rails, работающее в контейнере докеров в среде разработки.
Когда я пытаюсь отлаживать его с размещением binding.pry
где-то в коде и прикрепляться к контейнеру, я могу увидеть приглашение pry
на выходе, но он не останавливается на нем, и я не могу с ним взаимодействовать как это было без контейнера докеров.
Итак, как мне отлаживать контейнерное приложение?
Ответы
Ответ 1
Если вы используете docker-compose, вы можете добавить эти флаги в docker-compose.yml
:
app:
tty: true
stdin_open: true
И затем присоединитесь к вашему процессу с помощью docker attach
. pry-rails
работает здесь сейчас. Убедитесь, что less
установлен на вашем контейнере для оптимального использования.
ср. https://github.com/docker/compose/issues/423#issuecomment-141995398
Ответ 2
чтобы использовать pry, вы должны запускать его по-другому:
docker-compose run --service-ports web
ознакомьтесь с этой статьей для получения дополнительной информации:
http://blog.carbonfive.com/2015/03/17/docker-rails-docker-compose-together-in-your-development-workflow/
Ответ 3
У меня была такая же проблема, когда я работал с Пассажиром. Попробуйте изменить "pry-rails"
в Gemfile на gem "pry-remote"
, который инициирует dRuby или распределенный протокол без зависимостей.
Если вы хотите остановить код при выполнении вызова "binding.remote_pry"
, а не "binding.pry"
Затем просто вызовите remote-pry
в консоли, чтобы получить к нему доступ. Он должен работать одинаково. В тестовой среде обычный binding.pry
работает отлично.
Ответ 4
Если вы не используете docker-compose
, хотя вы можете просто запустить контейнер с опцией -it
.
Например:
docker run -v /Users/adam/Documents/Rails/Blog/:/usr/src/app -p 3000:3000 -it blog