在 rails app 运行 passenger 上使用 ruby 配置 vimspector

Configuring vimspector with ruby on rails app running passenger

我的问题是 如何在 rails app 运行ning passenger 上获取 vimspector 运行 a ruby(我想想)

我正在尝试在我正在处理的 rails 项目上使用一些 ruby 设置 vimspector。基本上问题是 vimspector 不会在某些应用程序的断点处停止。这些应用程序正在使用乘客。在一个非常基本的示例应用程序中,vimspector 工作正常,但在我实际需要调试的应用程序中却不行。

描述:

当我调用 vimspector#Launch 时,所有 splits/windows 都会出现,并且 passenger application 服务器启动。有些项目我不是一个人工作,所以我真的不能把这个改成另一个。

我设置了一些断点并执行了应该在它们处停止的操作,但是它们 运行 通过 没有 调试器。除了线程 运行ning 和 rails 服务器的控制台输出外,其他什么也没有显示在拆分中。在我的流程中,出现了 2 个流程。一旦 Passenger Ruby 应用程序和一次节点进程进入我的 cust_vscode-ruby 调试器所需的目录。节点进程有子进程 rdebug-ide 和 rdebug-ide 有 passenger start.

由于 vimspector 在示例 rails 应用程序上运行良好,我认为这不是安装问题或类似问题。

我尝试切换到附加,但是在配置附加时我得到了无限加载,而没有在浏览器中超时。我 运行 rdebug-ide 启动的终端 window 没有任何反应,我启动 vimspector 并且服务器正在启动。然而,它就此停止,并且永远不会超过引导 Run rails server -h for more startup options。之后 passenger 正常启动。切换到附加模式后,只有 rdebug 控制的 rails 服务器出现在我的进程中。

我认为这应该是可能的,因为我正在使用 ruby-debug-ide,Ruby我可以在其上调试应用程序 [=69] =]宁乘客就好了。我很确定这与乘客有关,因为在启动配置中调用它会导致它转义并使用附加配置会导致它阻止 rails 服务器启动。但是我不知道怎么解决。

.vimspector.json 示例应用程序和实际应用程序相同 :

{
    "configurations": {
        "rails": {
            "adapter": "cust_vscode-ruby",
            "default": true,
            "configuration": {
                "name": "Debug Rails server",
                "type": "Ruby",
                "request": "launch",
                "cwd": "${workspaceRoot}",
                "pathToBundler": "/Users/username/.rvm/rubies/ruby-version/bin/bundler",
                "pathToRDebugIDE": "/Users/username/.rvm/gems/ruby-version/gems/ruby-debug-ide-0.7.3",
                "program": "${workspaceRoot}/bin/rails",
                "args": [
                    "server"
                ]
            }
        }
    }
}

vimspector 配置输出

Vimspector Debug Info
--------------------------------------------------------------------------------
ConnectionType: job
Adapter: 
--------------------------------------------------------------------------------
{
  "command": [
    "node",
    "/Users/username/.vim/plugged/vimspector/gadgets/macos/cust_vscode-ruby/dist/debugger/main.js"
  ],
  "configuration": {
    "cwd": "/Users/username/Folder/app-name",
    "showDebugOutput": false,
    "trace": false
  },
  "name": "vscode-ruby-debug",
  "env": {},
  "cwd": "/Users/username/Folder/app-name"
}
--------------------------------------------------------------------------------
Configuration: 
--------------------------------------------------------------------------------
{
  "adapter": "cust_vscode-ruby",
  "default": true,
  "configuration": {
    "name": "Debug Rails server",
    "type": "Ruby",
    "request": "launch",
    "cwd": "/Users/username/Folder/app-name",
    "pathToBundler": "/Users/username/.rvm/rubies/ruby-version/bin/bundler",
    "pathToRDebugIDE": "/Users/username/.rvm/gems/ruby-version/gems/ruby-debug-ide-0.7.3",
    "program": "/Users/username/Folder/app-name/bin/rails",
    "args": [
      "server"
    ]
  }
}
--------------------------------------------------------------------------------
API Prefix: 
Launch/Init: True / True
Workspace Root: /Users/username/Folder/app-name
Launch Config: 
--------------------------------------------------------------------------------
{
  "cwd": "/Users/username/Folder/app-name",
  "showDebugOutput": false,
  "trace": false,
  "name": "Debug Rails server",
  "type": "Ruby",
  "request": "launch",
  "pathToBundler": "/Users/username/.rvm/rubies/ruby-version/bin/bundler",
  "pathToRDebugIDE": "/Users/username/.rvm/gems/ruby-version/gems/ruby-debug-ide-0.7.3",
  "program": "/Users/username/Folder/app-name/bin/rails",
  "args": [
    "server"
  ]
}
--------------------------------------------------------------------------------
Server Capabilities: 
--------------------------------------------------------------------------------
{
  "supportsConfigurationDoneRequest": true,
  "supportsConditionalBreakpoints": true
}
--------------------------------------------------------------------------------
Line Breakpoints: 
--------------------------------------------------------------------------------
{
  "/Users/username/Folder/app-name/app/controllers/.../somethings_controller.rb": [
    {
      "state": "ENABLED",
      "line": 83,
      "options": {},
      "sign_id": 1,
      "server_bp": {
        "verified": true,
        "line": 83,
        "id": 1
      }
    }
  ]
}
--------------------------------------------------------------------------------
Func Breakpoints: 
--------------------------------------------------------------------------------
[]
--------------------------------------------------------------------------------
Ex Breakpoints: 
None

所以我让它不与 passenger 本身一起工作。

我将我的 vimspector 配置更改为以下内容,通过反复试验将一些路径切换到使用的二进制文件(我认为重要的是在项目根目录中调用 rails 二进制文件)。 重要的是调用args server -u puma。确保将命令的每个部分写为单个参数。 puma 是默认的 rails 服务器(我发现它在我的示例应用程序中),因此它被 rdebug-ide 和 debase 选中。

{ 
    "configurations": { 
            "rails": { 
                    "adapter": "cust_vscode-ruby", 
                    "default": true, 
                    "configuration": { 
                            "name": "Debug Rails server", 
                            "type": "Ruby", 
                            "request": "launch", 
                            "cwd": "${workspaceRoot}", 
                            "pathToBundler": "/Users/username/.rvm/rubies/ruby-RUBYVERSION/bin/bundler", 
                            "pathToRDebugIDE": "/Users/username/.rvm/gems/ruby-RUBYVERSION/gems/ruby-debug-ide-RUBYDEBUGIDEVERSION", 
                            "program": "${workspaceRoot}/bin/rails", 
                            "args": [ 
                                    "server", "-u", "puma" 
                            ] 
                    } 
            } 
    } 

}

我找到了一些使用 passenger 的选项,它可能需要将配置编写为附加。

看起来最接近(但它不起作用)的答案似乎复制了调用的 ruby​​mine 配置:

/bin/bash -c "~/.rvm/bin/rvm _RUBYVERSION_ do ~/.rvm/rubies/ruby-_RUBYVERSION_/bin/ruby ~/.rvm/gems/ruby-_VERSION_/gems/ruby-debug-ide-_RUBYDEBUG-IDEVERSION_/bin/rdebug-ide --key-value --disable-int-handler --evaluation-timeout 10 --evaluation-control --time-limit 100 --memory-limit 0 --rubymine-protocol-extensions --port 42371 --host 0.0.0.0 --dispatcher-port 38403 -- ~/Folder/project/bin/rails server -b 0.0.0.0 -p 3000 -e development"

我认为它可能会失败的一点,以及它不起作用的原因是需要将 passenger 设置为允许调试 (PassengerDebugger on),尽管我可能只是混淆了这里的所有内容。但是,此乘客选项保留给企业版 (https://www.phusionpassenger.com/library/admin/apache/debugging_console/ruby/)。 这让我失望的是我启动了这个调试配置但无法连接到套接字。也许这是我为了我自己的利益在我的系统上采取的一些安全措施,或者更可能是配置中的错误。

我认为可以以某种方式正确地连接到乘客服务器,也许可以在这里找到一些想法,但我没有得到任何帮助。 https://mondotondo.com/2012/08/23/how-to-remotely-debug-rails-in-apache-passenger-rubymine/ How can I get ruby-debug-ide to work?

如果你像我一样为此苦苦挣扎,坚持下去,总有一天你会成功的!