2013-08-11 3 views
0

Я следующий код JRuby, который использует Java класс javax.naming.InitialContext:`неинициализированного constant` ошибка

if RUBY_PLATFORM == "java" 
    require 'java' 
    import javax.naming.InitialContext 

    module JndiProperties 
    def self.getProperty(name) 
     begin 
     env.lookup(name).to_s 
     rescue 
     nil 
     end 
    end 

    def self.[](name) 
     getProperty(name) 
    end 

    private 
    def self.env 
     context = InitialContext.new 
     environment = context.lookup 'java:comp/env' 
     environment 
    end 
    end 
else 
    module JndiProperties 
    def self.getProperty(name) 
     nil 
    end 

    def self.[](name) 
     getProperty(name) 
    end 
    end 
end 

Я использую этот модуль в database.yml для настройки подключения к базе данных. Например .:

username: <%= JndiProperties['ANTARCTICLE_DB_USER'] || 'root' %> 

Когда я пытаюсь запустить приложение рельсы, я получаю uninitialized constant JndiProperties::InitialContext. Если я попытаюсь использовать этот модуль из irb, он будет работать, как ожидалось.

ответ

1

просто поставить импортную линию в модуль:

module JndiProperties 
    java_import 'javax.naming.InitialContext' 
end 

, как он использует const_missing разрешить или назначить константу вручную:

InitialContext = Java::JavaxNaming::InitialContext 

, чем он должен работать даже за пределами модуля

+0

такая же ошибка .. может быть, мне нужно уточнить, что я использую warbler, чтобы упаковать приложение в военный файл, а затем развернуть его – wedens

+0

@wedens, чем это должно быть что-то другое interf Это просто работает как ожидалось. https://gist.github.com/kares/d78d138165da7ad225b6 – kares

+0

Да, он работает в irb и как скрипт. но я не могу заставить его работать внутри файла войны (такая же ошибка) – wedens