2011-02-02 75 views
4

我們已經使用warbler(1.2.1)和JRuby(1.5.6)在Tomcat7服務器上運行我們的Rails(2.2.2)應用程序,但是由於我們希望將部署簡化爲我們希望在tomcat WEB-INF位置下運行rake任務,如db:migrate。我們已經打包了db文件夾以及所有的遷移。我們已經看到了網上推薦在Tomcat和JRuby下運行Rake任務

一種方法不起作用:

GEM_HOME=$JRUBY_HOME/lib/ruby/gems/1.8 
RUBYLIB=$JRUBY_HOME/lib/ruby/site_ruby/1.8 

同樣的命令給:

/var/lib/jruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:32 warning: already initialized constant RAKEVERSION 
/var/lib/jruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require': no such file to load -- fileutils (LoadError) 
     from /var/lib/jruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require' 
     from /var/lib/jruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:35 
     from /var/lib/jruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:31:in `require' 
     from /var/lib/jruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require' 
     from /var/lib/jruby-1.5.6/lib/ruby/gems/1.8/gems/rake-0.8.7/bin/rake:29 
     from /var/lib/jruby-1.5.6/lib/ruby/gems/1.8/gems/rake-0.8.7/bin/rake:19:in `load' 
     from /var/lib/jruby/bin/rake:19 

如果

java -jar lib/jruby-core-1.5.6.jar -S $JRUBY_HOME/bin/rake db:migrate RAILS_ENV=staging 

/var/lib/jruby/bin/rake:9:in `require': no such file to load -- rubygems (LoadError) 
     from /var/lib/jruby/bin/rake:9 

增加ENV後我只是運行:

jruby -S $JRUBY_HOME/bin/rake db:migrate RAILS_ENV=staging 

我得到了一個由供應商的寶石產生的寶石錯誤大調用堆棧。 (OutOfMemoryError,NUllPointerException等等,這在運行之間實際上並不一致)。

這個問題(How do I run rake rake tasks in a rails app which is served by tomcat with jruby war deployment?)也沒有咬它。任何建議表示讚賞。

乾杯。

回答

4

原來這個命令的工作

java -jar /var/lib/jruby/jruby-complete-1.5.6.jar -S rake db:migrate RAILS_ENV=staging 

只要我下載JRuby的完整的罐子,並確保我有ENV:

RUBYLIB=$JRUBY_HOME/lib/ruby/site_ruby/1.8 
GEM_HOME=$JRUBY_HOME/lib/ruby/gems/1.8 
+0

這很有趣。 GEM_HOME只有一堆gem文件,它們被打包在WEB-INF目錄中。但是,RUBYLIB似乎有一堆與ruby相關的文件。當我部署到Tomcat時,目的是部署除war文件以外的任何與ruby相關的內容。 RUBYLIB有什麼必要的文件來完成這項工作?如果我知道,我可以將config/warble.rb作爲包含它們的參數。 – 2012-02-05 04:34:04

2

我有這個問題爲好,但對視窗。

基於this warbler issue,我能夠把一個Windows批處理腳本,包括部署,使DB設置簡單爲我們的SAS:

SET RAILS_ENV=production 
SET BUNDLE_WITHOUT=development:test 
SET BUNDLE_GEMFILE=Gemfile 
SET GEM_HOME=gems 
java -classpath "lib/*" org.jruby.Main -S rake db:create db:migrate db:seed 
pause 

從的的WEB-INF目錄下運行這個部署的應用程序會這樣做。我確實需要將db目錄,Rakefile和Windows批處理腳本添加到我的warble.rb配置中,以使它們都可以很好地運行。

kares正在積極努力地在鶯中獲得適當的耙支持,所以這應該是一個「現在」的答案(如果我沒有在截止日期之前按下,它肯定有更清晰的方法),但我想我會分享,因爲這是一個絆腳石。