在模块化Sinatra应用程序中访问irb

Hen*_*ühe 1 ruby irb sinatra

我正在构建一个像Sinatra一样子类的应用程序:

require 'rubygems'
require 'sinatra/base'
require 'sinatra/assetpack'

class App < Sinatra::Base
  ...

  run!
end
Run Code Online (Sandbox Code Playgroud)

我怎样才能访问irb?以这种方式执行sinatra时不解析选项,如何以编程方式打开irb shell?

Arm*_*n H 7

我是否想要在您的应用程序中打开IRB会话(?)或使用IRB来调试您的Sinatra项目,我有点困惑?

为了调试基于Rack的应用程序(例如Sinatra),我喜欢使用racksh gem,它对于Rack应用程序来说就像 " Rails中的脚本/控制台 ".它优于IRB的主要优点是Racksh将整个应用程序环境加载到shell中,使调试变得轻而易举.

来自racksh的Github页面:"它的目的是允许开发人员内省他的应用程序和/或进行一些初始设置.例如,您可以运行DataMapper.auto_migrate!或向/ users/666发出请求并检查响应详细信息.它主要针对在没有类似控制台组件的应用程序(即使用Sinatra构建的应用程序)中,所有框架都可以从交互式机架堆栈和请求内省中受益."

但是,racksh要求您的应用拥有config.ru文件,因此您必须重新编写应用:

# in config.ru
require 'rubygems'
require 'sinatra/base'
require 'sinatra/assetpack'
require 'app.rb'


# in app.rb
class App < Sinatra::Base
  ...

  run!
end
Run Code Online (Sandbox Code Playgroud)

然后在你的app文件夹(config.ru所在的位置):

$ gem install racksh # or add gem 'racksh' to your Gemfile and run bundle
$ racksh
Run Code Online (Sandbox Code Playgroud)


小智 6

只需键入如下(在shell提示符下):

irb -r ./my_app.rb
Run Code Online (Sandbox Code Playgroud)