在Tomcat和JRuby下运行Rake任务

时间:2011-02-02 22:15:53

标签: tomcat rake jruby jrubyonrails warbler

我们已经使用warbler(1.2.1)和JRuby(1.5.6)在Tomcat7服务器上运行我们的Rails(2.2.2)应用程序,但由于我们希望简化到多台机器的部署,我们希望运行在tomcat WEB-INF位置下的rake任务,如db:migrate。我们已经打包了db文件夹以及所有迁移。

我们在网上推荐的一种方式不起作用:

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后:

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

如果我只是跑:

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?)也没有叮咬。任何建议表示赞赏。

干杯。

2 个答案:

答案 0 :(得分:4)

原来这个命令有效

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

只要我下载jruby-complete jar并确保我有ENV:

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

答案 1 :(得分:2)

我也有这个问题,但在Windows上。

基于this warbler issue,我能够整合Windows批处理脚本以包含在部署中,并使我们的SA的数据库设置变得简单:

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正积极努力在鸣鸟中获得适当的佣金支持,所以这应该是“现在”的答案(如果我没有在截止日期前按下,那么肯定会有更简洁的方法来解决它),但我认为无论如何我都会分享,因为这是一个绊脚石。