我正在构建一个像这样子类化 Sinatra 的应用程序:
require 'rubygems'
require 'sinatra/base'
require 'sinatra/assetpack'
class App < Sinatra::Base
...
run!
end
我怎样才能访问irb?以这种方式执行 sinatra 时不解析选项,如何以编程方式打开 irb shell?
只需键入如下(在 shell 提示符下):
irb -r ./my_app.rb
我有点困惑你是想从你的应用程序中打开一个 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
使用Sinatra和binger
gem检查这个简单的 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
。