我正在尝试在Rails 3.2应用程序中使用带有Trinidad的HBase Java API。 当我将所有jar文件放入Rails.root / lib / jars时,一切正常,这是Trinidad首选的* .jar文件夹。
当我尝试通过java.rb初始化文件(在config / initializers中)将jar文件与项目分开时,它将无法正常工作。 (使用WebBrick,一切都很顺利,但我们不能在生产中使用它。)
java.rb:
require 'java'
Dir['/var/apps/jars/*.jar'].each do |jar|
require jar
end
Trinidad启动没有问题,但是一旦请求使用HBaseConfiguration类命中控制器,就会抛出以下错误:
Java::JavaLang::RuntimeException (hbase-default.xml file seems to be for and old version of HBase (null), this version is 0.90.6-cdh3u4):
似乎hbase-default.xml捆绑在hbase-0.90.6-cdh3u4.jar文件中,但HBaseConfiguration类无法找到。
您对如何解决这个问题有什么想法吗?
答案 0 :(得分:1)
这可能不是“正确”的答案,但您可以自定义Trinidad的jars路径以指向应用程序的/var/apps/jars
(使用命令行或使用 trinidad.yml 配置)
比调整初始化程序所以当它在java web服务器中运行时它不会加载jar(Webrick是一个ruby web服务器,它恰好与JRuby一起运行,因为它是用纯Ruby编写的),例如:
Dir['/var/apps/jars/*.jar'].each do |jar|
require jar
end unless defined?($servlet_context)
至于你遇到的问题很可能是hbase.jar和/或hadoop.jar特有的(类加载器在一个简单的jruby应用程序和一个jruby servlet应用程序中看起来会有所不同),如果没有更多的东西,很难说信息,如堆栈跟踪,jar版本,最重要的是对hadoop配置/资源加载的一些了解。