1

问题

我希望能够在我的本地计算机上调试由 Thin 托管的 Sinatra 网站,并且我希望能够通过使用rake.

我无法接受建议使用不同技术(例如 Windows、Rails、Java)或其他服务器(例如 unicorn、passenger、puma)的答案;但是,如果我的要求是不可能的,那么我会接受这个答案。

我试过的

我的当前Rakefile包含一个:start启动瘦服务器的任务,但是当它到达断点时,我的终端上没有显示任何输出。如果我直接从终端启动 Thin,那么(rdb:1)当它按预期到达断点时我会看到提示。在任何一种情况下,瘦服务器都在正确运行站点(通过注释掉断点来确认)。

宝石文件

source :rubygems
gem 'sinatra'
gem 'thin'
gem 'debugger-pry'

耙文件

task :start do
  conf = File.expand_path('config.ru', File.dirname(__FILE__))
  `thin -e development -R #{conf} --debug start`
end

配置.ru

require File.expand_path('app', File.dirname(__FILE__))

run ModularExample::App.new

应用程序.rb

require 'sinatra'
require 'debugger/pry'

module ModularExample
  class App < Sinatra::Base
    get '/' do
      debugger
      "Hello, world"
    end
  end
end
4

1 回答 1

3

您没有输出到 STDOUT。反引号执行命令并将输出作为字符串返回,这样您就可以执行类似的操作

puts `thin -e development -R #{conf} --debug start`

但是您想将流程输出流式传输到 STDOUT,因此您实际上想要这样做:

task :start do
  conf = File.expand_path('config.ru', File.dirname(__FILE__))
  exec("thin -e development -R #{conf} --debug start")
end

从此问题了解有关调用命令行调用的更多信息。

于 2013-01-31T02:49:36.240 回答