从war文件中运行rake任务

我的代码库最初是用ruby编写的。 它有一个rakefile.rb文件来执行数据库迁移。 之后我将整个事情改为jruby,以便于部署,并且工作正常。 我面临的唯一问题是如何运行我的rake任务(执行数据库迁移)。

我试过了

 java -jar GV_S.war -S rake db_migrate[1] 

1是版本,但这不起作用。

这给了我:

 [Winstone 2012/03/23 18:04:56] - Beginning extraction from war file [Winstone 2012/03/23 18:04:56] - WARNING: The Servlet 2.4/2.5 spec XSD was unavailable inside the winstone classpath. Will be retrieved from the web if required (slow) [Winstone 2012/03/23 18:04:56] - No webapp classes folder found - /tmp/winstone6913591014121608835webroot/GV_S.war/WEB-INF/classes [webapp 2012/03/23 18:04:57] - jruby 1.6.7 (ruby-1.9.2-p312) (2012-02-22 3e82bc8) (Java HotSpot(TM) 64-Bit Server VM 1.6.0_26) [linux-amd64-java] [Winstone 2012/03/23 18:05:03] - Listener winstone.ajp13.Ajp13Listener not found / disabled - ignoring [Winstone 2012/03/23 18:05:03] - Listener winstone.ssl.HttpsListener not found / disabled - ignoring [Winstone 2012/03/23 18:05:03] - Winstone Servlet Engine v0.9.10 running: controlPort=disabled [Winstone 2012/03/23 18:05:03] - HTTP Listener started: port=8080 

任何帮助将不胜感激

-谢谢

这似乎还没有得到warbler的支持 – 执行jruby样式的commads与可执行文件.jar一起使用但是生成.war可执行文件只允许它与嵌入式Web服务器一起运行……没有别的。

终于找到了有用的东西….我第一次尝试

 java -jar lib/jruby-complete-1.6.7.jar -S rake db_migrate[1] 

这在我的个人机器上工作正常,但给我一些类似下面关于生产的消息

 rake aborted! cannot load Java class com.mysql.jdbc.Driver Tasks: TOP => db_migrate (See full trace by running task with --trace) 

这是因为我在我的rake任务中使用了像续集,记录器等gem….我负责那些安装在我的机器上而不是生产机器上……在生产中安装这些gem不是一种选择….所以我将rake任务中所需的gem安装在一个单独的目录中,并将其转换为jar文件( http://blog.nicksieger.com/articles/2009/01/10/jruby-1-1-6-gems-in -a-jar )……这个命令终于奏效了……

 java -jar lib/jruby-complete-1.6.7.jar -rlib/mygems.jar -S rake db_migrate[1] 

请注意:无论你把jar文件放在哪里,warbler都会把它发送到lib目录,虽然你仍然会在原来的位置看到一个虚拟的jar文件……我觉得如果工作的话,解决方案可能会有点整洁从几个方面出来,虽然还没试过……

i>通过在上面提到的博客中提到的jruby-complete-1.6.7.jar中包含gem文件…

 java -jar lib/jruby-complete-1.6.7.jar -S rake db_migrate[1] 

那应该工作……

ii>通过编写某种清单文件并将其包含在mygems.jar中以使其独立运行…如果发生这种情况

 java -jar myapp.jar -S rake db_migrate[1] 

应该管用