繁体   English   中英

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

[英]Accessing the irb in a modular Sinatra application

我正在构建一个将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相比,它的主要优势在于,sharksh将整个应用程序环境加载到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

只需键入以下内容(在shell提示符下):

irb -r ./my_app.rb

使用Sinatrabinger 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/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM