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

时间:2012-10-15 06:55:53

标签: ruby sinatra irb

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

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

class App < Sinatra::Base
  ...

  run!
end

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

3 个答案:

答案 0 :(得分:7)

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

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

来自racksh的Github page:“它的目的是允许开发人员内省他的应用程序和/或进行一些初始设置。例如,您可以运行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

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

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

答案 1 :(得分:6)

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

irb -r ./my_app.rb

答案 2 :(得分:1)

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

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

source "https://rubygems.org"

gem 'sinatra'
gem 'binger'

然后运行将生成bundle的{​​{1}}命令。 然后创建一个Gemfile.lock文件,并按示例添加:

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 % >

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

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