让Sinatra与JRuby和Warbler合作

时间:2011-05-07 22:10:47

标签: sinatra jruby warbler

我在hello-world风格的应用程序中使用以下config / warble.rb:

Warbler::Config.new do |config|
  config.dirs = %w(app config tmp gems views)
  config.includes = FileList["hello.rb"]
  config.gems = ["sinatra"]
  config.gem_dependencies = true
end

现在,当我运行jruby -S warble时,这是错误消息:

warble aborted!
uninitialized constant Warbler::Jar::Pathname
org/jruby/RubyModule.java:2526:in `const_missing'

任何人都可以帮我解决这个问题吗?直接执行时应用程序运行没有问题,因此看起来我安装了所有必需的gem。

环境:

  • JRuby 1.6.1(与1.5.6相同)
  • Sinatra 1.2.6
  • Warbler 1.3.0
  • Windows XP
  • Ubuntu 10.04.1

2 个答案:

答案 0 :(得分:2)

我找到了一个适用于ruby和jruby的解决方法。

我没有在config / warble.rb中指定gems,而是安装了Bundler gem并在我的应用程序的根文件夹中创建了Gemfile,其中包含以下内容:

source :rubygems
gem "sinatra"

从config / warble.rb文件中删除了该文件,该文件的实际内容如下所示:

Warbler::Config.new do |config|
  config.includes = FileList["hello.rb"]
end

总结:

  • gems进入Gemfile
  • 应用程序文件进入config / warble.rb文件

答案 1 :(得分:2)

事实证明,warbler中存在一个明显的错误,阻止此功能在jruby 1.6.1和ruby 1.8.7下工作(不知道其他版本因为我没有测试它)。

看看这里快速修复:

https://github.com/padcom/warbler/commit/b4b24e17dee5bb98525203c82519a8901874ef81