4

我们已经使用 warbler (1.2.1) 和 JRuby (1.5.6) 在 Tomcat7 服务器上运行 Rails (2.2.2) 应用程序,但是由于我们想要简化到多台机器的部署,我们想要运行 rake 任务,之类db:migrate的,在tomcat WEB-INF 位置下。我们已经打包了 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

我收到大量由供应商化的 gem 导致的 gem 错误调用堆栈。(OutOfMemoryError、NUllPointerException 等。这在运行之间实际上并不一致)。

这个问题(How do I run rake rake tasks in a rails app that is service by tomcat with jruby war deployment?)也没有任何问题。任何建议表示赞赏。

干杯。

4

2 回答 2

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
于 2011-02-03T01:44:22.647 回答
2

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

基于这个莺问题,我能够将 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正在积极努力在 warbler 中获得适当的 rake 支持,所以这应该是一个“暂时”的答案(如果我没有被截止日期催促,肯定有更干净的方法来解决它),但我想我' d 无论如何都要分享,因为这是一个绊脚石。

于 2013-01-04T18:49:37.130 回答