2013-02-01 9 views
6

L'esecuzione di questo problema durante l'implementazione del progetto Rails 3.2 su Weblogic 10.3 era alla ricerca di una risposta facile.ActiveRecord non manca la base costante! errore nell'implementazione di rails 3.2.9 jruby 1.7.2 in 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) 

Ambiente si presenta così: JRuby 1.7.2, JRockit 1.6, Rails 3.2.9, Luì

schiero il modello base 2 più medito progetto utente e questo errore si verifica quando navigo ad esso in un browser. Qualcuno ha visto questo prima? Questo è il mio primo periodo con JRuby.

Montaggio:

aggiungendo il mio ultimo tentativo fallito. nota, ho provato jruby, jruby-jars per 1.6.8, 1.7.0, 1.7.2 e non ho avuto successo. ecco il mio Gem file e la configurazione silvia:

#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 

e Allodola Config (Usando Warble Guerra):

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 

risposta

1

Questo sembra essere un bug JRuby: http://jira.codehaus.org/browse/JRUBY-6705

+0

Puoi suggerire una soluzione alternativa? Questo problema è stato risolto in 1.7.0 a giugno. Ho provato 1.7.2, 1.7.1, 1.7.0, 1.6.8 e non sembra essere risolto. Il bug relativo sembra essere preciso e la mia descrizione precisa, ma senza molta esperienza in jRuby, non posso fare diagnosi per riportare anche un bug jRuby. –

+0

Puoi aggiornare il tuo pacchetto? Il Gemfile predefinito di Rails assorbe un po ', cambia 'gem' rails ',' ~> 3.2.x'' in' gem 'rails', '<3.3'' in modo da ottenere le versioni di bugfix. Lo stesso vale per 'sass-rails' e' coffee-rails'. ActiveSupport 3.2.9 è in qualche modo sorpassato, la versione corrente è 3.2.11. – ckruse

+0

No go on the bundle update. Ho provato 1.6.8 -> 1.7.2 e tutto quello che c'è in mezzo. C'è qualche informazione specifica o una guida su come restringere l'errore specifico in quanto l'intero messaggio di errore è molto vago. –

0

ho avuto un conversazione di recente con un collega che si è imbattuto in un problema simile mentre distribuiva Jenkins a Weblogic. Esiste una descrizione dettagliata di ciò che DEVI fare se decidi di distribuire JRuby su Weblogic. Nel mio caso, mi sono trasferito a JBoss e ti suggerisco di fare lo stesso. Se si deve eseguire la distribuzione su weblogic, questo collegamento descrive i requisiti necessari per garantire che Weblogic precarica tutte le librerie necessarie.

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

Se l'unica opzione è weblogic, quindi mi raccomando controllo di un semplice test di configurazione prima di sviluppare il progetto con un presupposto che funzionerà.

Ecco un frammento:

Weblogic 12+. L'aggiunta di questo in un file nel progetto chiamato: 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> 

e nelle versioni precedenti non c'è ancora un po 'importante hackage per arrivare weblogic di decifrare correttamente i vasi e le dipendenze. In particolare per questa domanda, visto che sto lavorando su 10.3.X Inferiore a .4, ecco i passaggi.

vecchi server Weblogic

per correggere problemi di class loader di Weblogic, abbiamo bisogno di costruire un file EAR e mettere le direttive weblogic-application.xml in esso. 1. Creare una directory per la storia dei contenuti per le orecchie, con la seguente struttura (utilizzare la vostra guerra, invece di Jenkins): ROOT_Folder/

META-INF/ 
     application.xml 
     weblogic-application.xml 
    jenkins.war 
  1. cadere il jenkins.war nella ROOT_Folder

  2. creare la directory META-INF

  3. creare i seguenti file XML in tale dir META_INF (applicazione weblogic.xml):

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

    webapp.encoding.default UTF-8

    org.apache. javax.xml.stream.

Weblogic ha bisogno di questo perché (a differenza di JBoss, Tomcat, Jetty et. al) Weblogic non caricherà i JAR nel WAR prima dei JAR installati su Weblogic, e di solito l'errore risultante è che esiste una vecchia versione di Ant 1.7 in ambito, invece di Ant 1.8.x come vuole Jenkins. Esiste anche un conflitto con stax-api-1.0.1.jar per il pacchetto javax.xml elencato.

Ecco un semplice application.xml che funziona

<?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> 

Rezip i file, rendendo il vostro nuovo file EAR Install, quindi distribuire

Nota: Se è necessario testare questo, allora si prega di commentare qui se questo funziona. Non accetterò una risposta finché non avrò la convalida; da quando mi sono trasferito a JBoss per la distribuzione pulita.

Problemi correlati