1

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

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

class App < Sinatra::Base
  ...

  run!
end

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

4

3 回答 3

8

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

irb -r ./my_app.rb
于 2014-09-19T09:59:35.437 回答
7

我有点困惑你是想从你的应用程序中打开一个 IRB 会话(?)还是使用 IRB 来调试你的 Sinatra 项目?

对于调试基于 Rack 的应用程序(例如 Sinatra),我喜欢使用racksh gem,它“就像 Rails 中的脚本/控制台”用于 Rack 应用程序。与 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

然后在您的应用程序文件夹中(config.ru 所在的位置):

$ gem install racksh # or add gem 'racksh' to your Gemfile and run bundle
$ racksh
于 2012-10-31T19:43:01.617 回答
0

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

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

source "https://rubygems.org"

gem 'sinatra'
gem 'binger'

然后运行bundle将生成的命令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 % >

最后,运行rackup

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

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

于 2013-03-16T13:18:37.697 回答