如何修改此rake任务以启动支持本地调试的瘦服务器?

时间:2013-01-31 01:59:30

标签: ruby debugging sinatra rake

问题

我希望能够在我的本地计算机上调试由Thin托管的Sinatra网站,我希望能够使用rake启动它。

我无法接受建议使用不同技术(例如Windows,Rails,Java)或其他服务器(例如独角兽,乘客,美洲狮)的答案;但是,如果我要求的是不可能的,那么我会接受这个答案。

我尝试了什么

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

的Gemfile

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

Rake文件

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

config.ru

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

run ModularExample::App.new

app.rb

require 'sinatra'
require 'debugger/pry'

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

1 个答案:

答案 0 :(得分: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

详细了解如何通过此question调用命令行调用。