加载和运行Sinatra应用程序的过程是什么?

时间:2011-07-17 18:59:53

标签: ruby sinatra

我刚刚切换到Sinatra进行项目,我的项目只是:

/lib
/test
config.ru
Gemfile

在我的config.ru文件中,我有:

require 'rubygems'
require 'bundler'

Bundler.setup unless File.exists?(File.expand_path('../.bundle/environment', __FILE__))
Bundler.require(:default)

Dir.glob File.dirname(__FILE__) + '/lib/*.rb', &method(:require)

run HandHistoryParser

似乎加载,并且运行rackup启动服务器没有错误。但我有一个简单的测试脚本来测试输出,当脚本创建HandHistoryParser时,如

@file_reader = HandHistoryParser::FileReader.new("bulk_hands")

我收到此错误:

in `<main>': uninitialized constant Object::HandHistoryParser (NameError)

出于某种原因,我无法要求库文件,即使它在irb中有两种要求:

require './lib/hand_history_parser' 
require '../../lib/hand_history_parser

我错过了什么?

2 个答案:

答案 0 :(得分:0)

您的错误消息表明这可能是范围问题。在中,模块和类常量正在定义,依此类推,但自我设置为main /全局范围以外的其他东西。

尝试更改此内容:

Dir.glob File.dirname(__FILE__) + '/lib/*.rb', &method(:require)

要:

Dir[__FILE__ + '/../lib/*.rb'] { |file| require file }

答案 1 :(得分:0)

等等......测试脚本是什么意思 我们正在使用机架/测试权

IMHO 如果,一个sinatra应用程序将更加测试友好 您的主应用程序类可以独立于config.ru启动

这样您就可以在测试文件中只需要'rack / test'和'app.rb'