我想使用VScode作为Ruby on Rails的集成调试器。关于如何做到这一点,似乎有很好的指南,无论是在VScode中启动进程还是连接到正在运行的调试服务器。
但是,我 * 找不到 * 好的指南来指导运行unicorn时如何执行此操作。rdebug-ide --host 0.0.0.0 --port 1234 --dispatcher-port 1234 -- ./bin/rails s
它需要bin/rails s
来启动rails服务器。这是我们目前用来启动unicorn的命令:bundle exec unicorn_rails -E "develop_against_staging" -p 3010 -c "${PWD}/config/unicorn.rb"
有没有一种方法可以从Rails中启动unicorn?或者有没有其他方法可以告诉rdebug-ide
该做什么?我甚至找不到关于rdebug-ide
的好文档。如果我找到了什么,我会继续摆弄并自己回答这个问题。
1条答案
按热度按时间wztqucjr1#
然后你需要通过提供
--dispatcher-port
选项让rdebug-ide知道你正在使用unicorn(多进程应用程序)。请查看rdebug-ide文件以查看所有可用的选项。--调度程序端口:这是一个相同的端口,你将用来运行unicorn。在您的情况下
3010
。因此,它应该如下所示:
bundle exec rdebug-ide --debug --port 1234 --dispatcher-port 3010 -- vendor/bundle/ruby/2.6.0/bin/unicorn -E "develop_against_staging" -p 3010 -c "${PWD}/config/unicorn.rb
单独运行上面的命令不会启动调试,事实上你的Unicorn服务器还没有启动。在终端窗口中运行上面的命令后查看日志时,你会注意到类似以下的消息
Fast Debugger (ruby-debug-ide 0.6.1, debase 0.2.4.1, file filtering is supported) listens on 127.0.0.1:1234
日志告诉我们rdebug-ide已准备好连接到端口1234。如果尚未创建launch.json文件,请创建该文件并添加此配置。
添加条目后,继续单击
Play
Image here按钮开始调试。现在,您的unicorn服务器已经启动,如果您尝试访问您的应用程序,您将无法访问它,因为工作进程尚未启动。
继续仔细查看日志,您会注意到
122: Ide process dispatcher notified about sub-debugger which listens on 34865
。这告诉我们在端口34865
上启动了一个新的子调试进程。这是随机生成的端口find_free_port。注意:每个unicorn-worker将有一个端口。
看到上面的日志后,在launch.json文件中添加另一个条目,并将新生成的端口复制到该文件中。
添加后,选择新的配置并单击播放按钮。如果您在unicorn.config文件中将工作线程数设置为一个,您应该看到类似于.
I, [2022-07-13T19:44:26.914412 #122] INFO -- : worker=0 ready
的日志。现在设置一个断点并开始使用您的应用程序,它将在到达该代码路径时中断。如果你已经成功地设置了一切,并得到了这一点,将有一些gotcha,你可能需要处理。
这种复杂性是因为独角兽的主仆设计。
回答这个有点匆忙,请让我知道,如果你有任何问题。我道歉,如果我使这个更多的混乱给你。