使用ruby on rails应用程序配置vimspector运行乘客

j8ag8udp  于 2022-11-11  发布在  Ruby
关注(0)|答案(1)|浏览(165)

我的问题是我如何让vimspector运行一个ruby on rails应用程序运行乘客(我认为)
我正在尝试用我正在做的ruby on rails项目来设置vimspector。基本上问题是vimspector在一些应用程序中没有在断点处停止。这些应用程序使用passenger。在一个非常基本的示例应用程序中,vimspector工作得很好,但在我真正需要调试的应用程序中就不行了。

说明

当我调用vimspector#Launch时,所有的分割/窗口都出现了,并且一个 * 乘客应用程序 * 服务器启动了。我在一些项目上不是单独工作的,所以我不能真正地将其更改为另一个。
我设置了一些断点,并执行了一些应该在断点处停止的操作,但它们像 * 没有 * 调试器一样运行。在拆分中,除了线程运行和rails服务器的控制台输出外,什么也没有显示。在我的进程中,显示了2个进程。一次是Passenger Ruby应用程序,另一次是节点进程进入调试器所需的cust_vscode-ruby目录。节点进程有子进程rdebug-ide和rdebug-ide具有乘客启动。
由于vimspector可以很好地使用示例Rails应用程序,我不认为这是安装或类似的问题。
我试着切换到attach,但是当配置它为attach时,我在浏览器中没有超时就得到了无休止的加载。我运行rdebug-ide的终端窗口启动时没有任何响应,我启动了vimspector,服务器正在启动。但是,它在此停止,并且从未超过启动Run rails server -h for more startup options。之后,乘客正常启动。切换到附加模式后,只有rdebug控制的rails服务器会显示在我的进程中。
我认为这应该是可能的,因为我正在使用ruby-debug-ide,这是由RubyMine使用,我可以调试运行乘客的应用程序很好。我很确定这是与乘客有关,因为在启动配置中调用它导致它逃逸,使用附加配置导致它阻止Rails服务器 Boot 。但我不知道如何修复它。

. 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
6tdlim6h

6tdlim6h1#

所以我让它工作,而不是与乘客本身。
我把我的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的选项,它可能需要将config写为attach。
看起来最接近(但它不起作用)的答案似乎是复制了调用以下命令的rubymine配置:

/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"

我认为它可能会失败的一个点,以及它不工作的原因是需要将乘客设置为允许调试(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?
如果你像我一样在这件事上挣扎,坚持下去,总有一天你会得到它的!

相关问题