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

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

require 'rubygems' require 'sinatra/base' require 'sinatra/assetpack' class App < Sinatra::Base ... run! end 

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

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

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

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

但是,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 

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

 $ gem install racksh # or add gem 'racksh' to your Gemfile and run bundle $ racksh 

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

 irb -r ./my_app.rb 

使用Sinatra和binger gem检查Microsoft Bing的这个简单搜索界面。 如果您按照那里的说明进行操作,您会更好地理解。

首先,创建一个Gemfile并添加:

 source "https://rubygems.org" gem 'sinatra' gem 'binger' 

然后运行将生成Gemfile.lockbundle命令。 然后创建一个config.ru文件,并通过示例添加:

 require 'rubygems' require 'bundler' Bundler.require require './app.rb' run MyApp 

你的app.rb看起来像这样:

 class MyApp < Sinatra::Base get '/' do @title = "Index" erb:index end end 

您必须具有名为views的文件夹。 创建index.erb并添加:

 < % = @title % > 

最后,运行rackup

来源: https : //github.com/thinkphp/sinatra-bing

演示: http : //sinatra-bing.herokuapp.com/