在 Minikube 中调试 Rails 应用程序

E.E*_*.33 5 ruby-on-rails kubernetes minikube skaffold

我正在本地计算机上的 minikube 集群内运行 Rails 服务。我喜欢在代码中添加断点以便与流程交互。这在 Minikube 内部不起作用。我可以附加到运行 Rails 容器的 Pod 并点击binding.pr代码中的语句,而不是获得交互式断点,我只是看到撬尝试创建断点,但最终直接越过它。有人知道如何让它工作吗?我猜部署的 Pod 本身不是交互式的。

OhH*_*ark 5

您正在尝试以交互方式访问您的应用程序。

您的问题是由于 k8s 默认情况下没有为容器分配 TTY 和 stdin 缓冲区而引起的。

我已经复制了您的问题并找到了解决方案。

要获得交互式断点,您必须在部署 yaml 中添加 2 个标志以指示您需要交互式会话:

   stdin: true
   tty: true
Run Code Online (Sandbox Code Playgroud)

下面是一个部署示例:

   apiVersion: apps/v1
   kind: Deployment
   metadata:
     labels:
       run: test
     name: test
   spec:
     selector:
       matchLabels:
         run: test
     template:
       metadata:
         labels:
           run: test
       spec:
         containers:
         - image: test
           name: test
           stdin: true
           tty: true
Run Code Online (Sandbox Code Playgroud)

您可以在这里找到更多相关信息。

附加到 pod 时请记住使用 -it 选项,如下所示:

   kubectl attach -it <pod_name>
Run Code Online (Sandbox Code Playgroud)

让我知道这是否有帮助。

  • 效果很好...非常感谢! (2认同)