【发布时间】:2018-06-26 09:56:50
【问题描述】:
我从 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)
我认为这是因为 gateways.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 位于 Jar 中。
有人知道为什么会发生这种情况以及如何让它发挥作用吗?
【问题讨论】:
标签: ruby jruby activemerchant