我們已經使用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?)也沒有咬它。任何建議表示讚賞。
乾杯。
這很有趣。 GEM_HOME只有一堆gem文件,它們被打包在WEB-INF目錄中。但是,RUBYLIB似乎有一堆與ruby相關的文件。當我部署到Tomcat時,目的是部署除war文件以外的任何與ruby相關的內容。 RUBYLIB有什麼必要的文件來完成這項工作?如果我知道,我可以將config/warble.rb作爲包含它們的參數。 – 2012-02-05 04:34:04