在模块化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.lock
的bundle
命令。 然后创建一个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/