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