6

Rails 3.2 プロジェクトを Weblogic 10.3 にデプロイしているときにこの問題に遭遇し、簡単な答えを探していました。

org.jruby.exceptions.RaiseException: (NameError) ActiveRecord is not missing constant Base!
at RUBY.load_missing_constant(<app_deploy_dir>/<app_name>/mfey8c/war/WEB-INF/gems/gems/activesupport-3.2.9/lib/active_support/dependencies.rb:494)
at RUBY.const_missing(<app_deploy_dir>/<app_name>/mfey8c/war/WEB-INF/gems/gems/activesupport-3.2.9/lib/active_support/dependencies.rb:192)
at org.jruby.RubyArray.each(org/jruby/RubyArray.java:1613)
at RUBY.const_missing(<app_deploy_dir>/<app_name>/mfey8c/war/WEB-INF/gems/gems/activesupport-3.2.9/lib/active_support/dependencies.rb:190)
at RUBY.(root)(<app_deploy_dir>/<app_name>/mfey8c/war/WEB-INF/gems/gems/meta_search-1.1.3/lib/meta_search.rb:55)
at org.jruby.RubyKernel.require(org/jruby/RubyKernel.java:1027)
at ActiveSupport::Dependencies::Loadable.require(<app_deploy_dir>/<app_name>/mfey8c/war/WEB-INF/gems/gems/activesupport-3.2.9/lib/active_support/dependencies.rb:251)
at ActiveSupport::Dependencies::Loadable.load_dependency(<app_deploy_dir>/<app_name>/mfey8c/war/WEB-INF/gems/gems/activesupport-3.2.9/lib/active_support/dependencies.rb:236)
at ActiveSupport::Dependencies::Loadable.require(<app_deploy_dir>/<app_name>/mfey8c/war/WEB-INF/gems/gems/activesupport-3.2.9/lib/active_support/dependencies.rb:251)
at RUBY.(root)(<app_deploy_dir>/<app_name>/mfey8c/war/WEB-INF/gems/gems/activeadmin-0.5.0/lib/active_admin.rb:1)
at org.jruby.RubyKernel.require(org/jruby/RubyKernel.java:1027)
at ActiveSupport::Dependencies::Loadable.require(<app_deploy_dir>/<app_name>/mfey8c/war/WEB-INF/gems/gems/activesupport-3.2.9/lib/active_support/dependencies.rb:251)
at ActiveSupport::Dependencies::Loadable.load_dependency(<app_deploy_dir>/<app_name>/mfey8c/war/WEB-INF/gems/gems/activesupport-3.2.9/lib/active_support/dependencies.rb:236)
at ActiveSupport::Dependencies::Loadable.require(<app_deploy_dir>/<app_name>/mfey8c/war/WEB-INF/gems/gems/activesupport-3.2.9/lib/active_support/dependencies.rb:251)
at RUBY.(root)(<app_deploy_dir>/<app_name>/mfey8c/war/WEB-INF/gems/gems/activeadmin-0.5.0/lib/active_admin.rb:1)
at org.jruby.RubyKernel.require(org/jruby/RubyKernel.java:1027)
at RUBY.(root)(<app_deploy_dir>/<app_name>/mfey8c/war/WEB-INF/gems/gems/activeadmin-0.5.0/lib/activeadmin.rb:1)
at org.jruby.RubyArray.each(org/jruby/RubyArray.java:1613)
at RUBY.(root)(<app_deploy_dir>/<app_name>/mfey8c/war/WEB-INF/gems/gems/activeadmin-0.5.0/lib/activeadmin.rb:1)
at org.jruby.RubyArray.each(org/jruby/RubyArray.java:1613)
at RUBY.(root)(<app_deploy_dir>/<app_name>/mfey8c/war/WEB-INF/gems/gems/bundler-1.2.3/lib/bundler/runtime.rb:1)
at RUBY.require(<app_deploy_dir>/<app_name>/mfey8c/war/WEB-INF/gems/gems/bundler-1.2.3/lib/bundler/runtime.rb:68)
at RUBY.require(<app_deploy_dir>/<app_name>/mfey8c/war/WEB-INF/gems/gems/bundler-1.2.3/lib/bundler/runtime.rb:66)
at org.jruby.RubyKernel.require(org/jruby/RubyKernel.java:1027)
at RUBY.require(<app_deploy_dir>/<app_name>/mfey8c/war/WEB-INF/gems/gems/bundler-1.2.3/lib/bundler/runtime.rb:55)
at org.jruby.RubyKernel.require(org/jruby/RubyKernel.java:1027)
at RUBY.require(<app_deploy_dir>/<app_name>/mfey8c/war/WEB-INF/gems/gems/bundler-1.2.3/lib/bundler.rb:128)
at RUBY.(root)(<app_deploy_dir>/<app_name>/mfey8c/war/WEB-INF/config/application.rb:13)
at RUBY.(root)(<app_deploy_dir>/<app_name>/mfey8c/war/WEB-INF/config/environment.rb:1)

環境は次のようになります: JRuby 1.7.2、JRockit 1.6、Rails 3.2.9、Warbler

基本 2 モデルとデバイス ユーザー プロジェクトをデプロイしましたが、ブラウザーで参照するとこのエラーが発生します。誰もこれを見たことがありますか?これは、JRuby を使用する最初のスティントです。

編集:

最近失敗した試行を追加します。注、1.6.8、1.7.0、1.7.2 で jruby、jruby-jars を試しましたが、成功しませんでした。これが私のGemファイルとワーブラーの構成です:

#source 'https://rubygems.org'
source "http://bundler-api.herokuapp.com"

gem 'rails', '<3.3'

# Bundle edge Rails instead:
# gem 'rails', :git => 'git://github.com/rails/rails.git'


gem 'savon'

#gem 'jruby-openssl'
gem 'json'
#gem 'ffi', '~>1.0.9'
#gem 'sqlite3'
gem 'rake', "=10.0.2"
gem 'activerecord-oracle_enhanced-adapter', "~> 1.4.0"

# Gems used only for assets and not required
# in production environments by default.
group :assets do
  gem 'sass-rails',   '<3.3'
  gem 'coffee-rails', '<3.3'

  # See https://github.com/sstephenson/execjs#readme for more supported runtimes
  #gem 'therubyrhino'
  #gem 'therubyracer'
  #gem 'libv8'

  gem 'uglifier', '>= 1.0.3'
end

platforms :jruby do
  group :assets do
    gem 'therubyrhino'
  end

  group :development, :test do
    gem 'ruby-debug'
    gem 'activerecord-jdbcsqlite3-adapter', "~> 1.2.5"
    gem 'warbler'
  end


  gem 'jruby-jars', "1.7.0"
  gem 'jruby-openssl', :require => false
end

platforms :ruby do
  group :assets do
    gem 'therubyracer'
    gem 'libv8'
  end

  group :development, :test do
    gem 'debugger'
    gem 'sqlite3'
  end

  gem 'ruby-oci8', '~> 2.1.0' # requires oracle client
end

gem 'jquery-rails'
gem 'devise'
gem 'activeadmin'
gem 'rb-readline'
gem 'validates_timeliness', '~> 3.0'
gem 'wash_out'#, :path => "~/Desktop/code/wash_out"

# To use ActiveModel has_secure_password
# gem 'bcrypt-ruby', '~> 3.0.0'

# To use Jbuilder templates for JSON
# gem 'jbuilder'

# Use unicorn as the app server
# gem 'unicorn':path 

# Deploy with Capistrano
# gem 'capistrano'

# To use debugger
# gem 'uby-debug'

group :development do

end

group :test do
  gem 'cucumber-rails', :require => false
  #gem 'cucumber', :require => false
  gem 'shoulda-matchers'
  gem 'json_spec'
  gem 'vcr'
  gem 'fakeweb'
  gem 'database_cleaner'
  gem 'launchy'
  gem 'webrat'
  gem 'json_spec'
  #gem 'capybara'
  #gem 'mocha'
end

group :development, :test do
  #gem 'activerecord-sqlite3-adapter', :platform => :ruby
  #gem 'activerecord-jdbc-sqlite3-adapter', :platform => :jruby
  gem 'rspec-rails'
  gem 'factory_girl_rails', "~> 4.0"
end

そして、Warbler Config (Warble War を使用):

    class Warbler::Jar
  def replace_compiled_ruby_files(config, compiled_ruby_files)
    config.excludes += compiled_ruby_files
    compiled_ruby_files.each do |ruby_source|
      files[apply_pathmaps(config, ruby_source, :application)] = StringIO.new("load __FILE__.sub(/\.rb$/, '.class')")
    end
  end
end

Warbler::Config.new do |config|
  config.dirs = %w(app config lib log vendor tmp)
  config.webxml.jruby.compat.version = "1.9"
end
4

2 に答える 2

1

これはjRubyのバグのようです:http://jira.codehaus.org/browse/JRUBY-6705

于 2013-02-07T14:54:55.643 に答える
0

私は最近、Jenkins を Weblogic にデプロイしているときに同様の問題に遭遇した同僚と会話しました。JRuby を Weblogic にデプロイすることにした場合に何をしなければならないかについての詳細な記事があります。私の場合、JBoss に移行したので、同じことをお勧めします。Weblogic にデプロイする必要がある場合、このリンクでは、Weblogic が必要なすべてのライブラリを確実にプリロードするために必要な要件について説明しています。

https://wiki.jenkins-ci.org/display/JENKINS/Weblogic

唯一のオプションが weblogic である場合は、プロジェクトを開発する前に、それが機能するという前提で簡単な構成テストを証明することを強くお勧めします。

ここにスニペットがあります:

ウェブロジック 12+。プロジェクト内の weblogic.xml というファイルにこれを追加します。

<?xml version="1.0" encoding="UTF-8"?>
<wls:weblogic-web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:wls="http://www.bea.com/ns/weblogic/90" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd http://www.bea.com/ns/weblogic/90 http://www.bea.com/ns/weblogic/90/weblogic-web-app.xsd">
    <wls:weblogic-version>12.1.1</wls:weblogic-version>
    <wls:context-root>jenkins</wls:context-root>
    <wls:container-descriptor>
         <wls:prefer-web-inf-classes>true</wls:prefer-web-inf-classes>
    </wls:container-descriptor>
</wls:weblogic-web-app> 

また、以前のバージョンでは、weblogic に jar と依存関係を適切に解読させるための、より重要なハックがいくつかありました。特にこの質問については、10.3.X Lower .4 で実行しているため、手順は次のとおりです。

古い W​​eblogic サーバー

Weblogic のクラス ローダーの問題を修正するには、EAR ファイルを作成し、そこに weblogic-application.xml ディレクティブを配置する必要があります。1. 次の構造で耳の内容を説明するディレクトリを作成します (Jenkins の代わりに war を使用します): ROOT_Folder/

    META-INF/
        application.xml
        weblogic-application.xml
    jenkins.war
  1. jenkins.war を ROOT_Folder にドロップします

  2. META-INF ディレクトリを作成します

  3. その META_INF ディレクトリ (weblogic-application.xml) に次の XML ファイルを作成します。

    http://java.sun.com/xml/ns/javaee/javaee_5.xsd http://www.bea.com/ns/weblogic/weblogic-application http://www.bea.com/ns/weblogic/ weblogic-application/1.0/weblogic-application.xsd ">

    webapp.encoding.default UTF-8

    org.apache. javax.xml.stream.

(JBoss、Tomcat、Jetty などとは異なり) Weblogic は、Weblogic が JAR をインストールする前に WAR に JAR をロードしないため、Weblogic はこれを必要とします。通常、結果として生じるエラーは、スコープ内に古いバージョンの Ant 1.7 ではなく、 Jenkinsが望むAnt 1.8.x。リストされている javax.xml パッケージの stax-api-1.0.1.jar との競合もあります。

これは機能する簡単なapplication.xmlです

<?xml version="1.0" encoding="UTF-8"?>

<application xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_5.xsd"
version="5">

<module id="jenkins">
<web>
<web-uri>jenkins.war</web-uri>
<context-root>/jenkins</context-root>
</web>
</module>
</application>

ファイルを再圧縮して、新しい EAR ファイルを作成します インストールしてからデプロイします

注:これをテストする必要がある場合は、これが機能するかどうかについてここにコメントしてください。検証が完了するまで、回答を受け入れません。クリーン デプロイのために JBoss に移行したためです。

于 2013-02-21T15:41:25.083 に答える