org.jruby.exceptions.RaiseException:(NameError)未初始化的常量

时间:2018-01-17 13:36:45

标签: ruby jruby activemerchant

我从ActiveMerchant库的JRuby包装中收到以下错误:

org.jruby.exceptions.RaiseException: (NameError) uninitialized constant ActiveMerchant::Billing::SecurePayAuGateway
    at org.jruby.RubyModule.const_missing(org/jruby/RubyModule.java:3345)
    at org.jruby.RubyModule.const_get(org/jruby/RubyModule.java:3290)
    at RUBY.createGateway(classpath:/scripts/main.rb:79)

启动它的代码是:

gateway = ActiveMerchant::Billing::const_get(name).new(options)

我认为这种情况正在发生,因为网关中发生了一些动态的网关加载.rb:

module ActiveMerchant
    module Billing
        load_path = Pathname.new(__FILE__ + '/../../..')
        Dir[File.dirname(__FILE__) + '/gateways/**/*.rb'].each do |filename|
            gateway_name      = File.basename(filename, '.rb')
            gateway_classname = "#{gateway_name}_gateway".camelize
            gateway_filename  = Pathname.new(filename).relative_path_from(load_path).sub_ext('')

            autoload(gateway_classname, gateway_filename)
        end
    end
end

这在单元测试期间有效,因为Ruby文件是目标目录中的真实文件。但是在最终的应用程序中,Ruby文件包含在Jar中的Jar中。

任何人都知道为什么会这样,以及如何让它发挥作用?

1 个答案:

答案 0 :(得分:0)

你想教什么网关?来自Active Merchant的github没有

ActiveMerchant::Billing::SecurePayAuGateway

但是有一个

ActiveMerchant::Billing::SecurePayGateway

并且

ActiveMerchant::Billing::SecurePayTechGateway

要测试,而不是

gateway = ActiveMerchant::Billing::const_get(name).new(options)

尝试

gateway = ActiveMerchant::Billing::SecurePayGateway

如果这样做,你知道问题是你的gateway =方法,你可以相应地解决这个问题