jruby 9.3.4.0 NoMethodError:未定义方法`new_ostruct_member' for No value for 'public' found

问题描述 投票:0回答:1

我从 9.3.2.0 更新到 jruby 到 9.3.4.0.

现在当我想制作 war 文件时出现错误。

有什么想法吗?

rvm use jruby-9.3.4.0
jruby -S bundle exec rake assets:clean
jruby -S bundle exec rake assets:precompile
jruby -S warble war

warble aborted!
NoMethodError: undefined method `new_ostruct_member' for No value for 'public' found
/usr/share/rvm/gems/jruby-9.3.4.0/gems/warbler-2.0.5/lib/warbler/traits/war.rb:200:in `method_missing'
/usr/share/rvm/gems/jruby-9.3.4.0/gems/warbler-2.0.5/lib/warbler/traits/war.rb:53:in `default_webxml_config'
/usr/share/rvm/gems/jruby-9.3.4.0/gems/warbler-2.0.5/lib/warbler/traits/war.rb:27:in `before_configure'
/usr/share/rvm/gems/jruby-9.3.4.0/gems/warbler-2.0.5/lib/warbler/traits.rb:29:in `block in before_configure'
/usr/share/rvm/gems/jruby-9.3.4.0/gems/warbler-2.0.5/lib/warbler/traits.rb:29:in `each'
/usr/share/rvm/gems/jruby-9.3.4.0/gems/warbler-2.0.5/lib/warbler/traits.rb:29:in `before_configure'
/usr/share/rvm/gems/jruby-9.3.4.0/gems/warbler-2.0.5/lib/warbler/config.rb:215:in `initialize'
config/warble.rb:19:in `new'
config/warble.rb:19:in `initialize'
/usr/share/rvm/gems/jruby-9.3.4.0/gems/warbler-2.0.5/lib/warbler/task.rb:46:in `eval'
/usr/share/rvm/gems/jruby-9.3.4.0/gems/warbler-2.0.5/lib/warbler/task.rb:46:in `initialize'
/usr/share/rvm/gems/jruby-9.3.4.0/gems/warbler-2.0.5/lib/warbler/application.rb:27:in `new'
/usr/share/rvm/gems/jruby-9.3.4.0/gems/warbler-2.0.5/lib/warbler/application.rb:27:in `load_rakefile'
/usr/share/rvm/gems/jruby-9.3.4.0/gems/warbler-2.0.5/lib/warbler/application.rb:79:in `run'
/usr/share/rvm/gems/jruby-9.3.4.0/gems/warbler-2.0.5/lib/warbler/application.rb:74:in `run'
/usr/share/rvm/gems/jruby-9.3.4.0/gems/warbler-2.0.5/bin/warble:11:in `<main>'
/usr/share/rvm/gems/jruby-9.3.4.0/bin/warble:25:in `load'
/usr/share/rvm/gems/jruby-9.3.4.0/bin/warble:25:in `<main>'
ruby jruby jrubyonrails warbler
1个回答
0
投票

这不会是一个答案,但我没有足够的声誉来发表评论。这让我找到了解决方案,所以还不错!

首先是咆哮。一年后的 2023 年 4 月,我遇到了同样的问题。我正在使用 JRuby 9.4.1 和 Warbler 2.0.5 版。我可以在 GitHub 上看到一个 issue,它于 2022 年 1 月开放,并且仍然开放。莺现在死了吗?

问题似乎是

new_ostruct_member
方法已在 JRuby 中设为私有,因此一种解决方法是绕过该保护。

将此代码粘贴到 warble.rb.

class Warbler::Traits::War::WebxmlOpenStruct
  def new_ostruct_member(name)
    send(:new_ostruct_member!, name)
  end
end

来源: Github 上的 JesseChavez 和 kovyrin

我还必须将 warbler 添加到我的 Gemfile 中,这在以前是没有必要的。

我必须做

bundle exec warble
才能让它运行,但我确实在它的末尾得到了一个 .war 文件。

事实证明(截至4月/23日)Github版本的Warbler正在运行,它只是在等待gem版本,所以另一种方法是告诉Bundler去Github。

gem 'warbler', '2.0.5', git: 'https://github.com/jruby/warbler', branch: 'master', platforms: :jruby

来源:Github 上的 rcrews

再次,我做了

bundle exec warble
让它运行,我又一次在它的末尾得到了一个 .war 文件。

rcrews 还说:

手动复制 *.gemspec 到生成的战争中:

mkdir WEB-INF && cp myapp.gemspec WEB-INF && zip myapp.war WEB-INF/myapp.gemspec && rm -r WEB-INF

我的项目中没有 gemspec 文件(我应该吗?),而且我还没有尝试部署 .war,所以对此没有评论。

© www.soinside.com 2019 - 2024. All rights reserved.