最适合在Padrino / Sinatra需要图书馆的地方

时间:2013-01-28 17:37:05

标签: ruby sinatra padrino

我在模型中使用“therubyracer”,我要求在模型顶部如此:

require 'v8'
class Thing
  def self.ctx; @@ctx ||= V8::Context.new; end;

  def self.eval(script); ctx.eval(script); end;
end

然而,我间歇性地得到:

NameError - uninitialized constant Thing::V8: 
/app/thing.rb:3:in `ctx'

通过本地Padrino服务器测试请求时,显然是在我修改Thing中的代码之后。通过重新启动padrino服务器可以解决此问题。我假设在其他地方要求v8可以解决这个问题,那是正确的地方吗?

2 个答案:

答案 0 :(得分:2)

这看起来可能是因为Padrino重新加载器在重新加载thing.rb文件时感到困惑,导致Ruby在V8命名空间中查找Thing

尝试使用V8前缀明确指定::位于顶层:

def self.ctx; @@ctx ||= ::V8::Context.new; end;

答案 1 :(得分:0)

如果将其添加到Gemfile中,您可以将它放在任何地方。你加了吗?

谢谢!