将JRuby on Rails应用程序部署到Tomcat的最佳方法是什么?

mad*_*lep 10 ruby tomcat capistrano ruby-on-rails jruby

我正在研究如何将Ruby on Rails应用程序(在JRuby上运行)部署到Tomcat实例进行测试.

tomcat实例正在我可以SSH到的Solaris服务器上运行.我已经看过使用Capistrano,但似乎没有太多关于使用它来部署到Tomcat,甚至在JRuby下运行它,并且由于Windows/JRuby环境我一直在Capistrano中遇到错误我的电脑正在运行(是的,这是公司 - 不是我的选择,但我必须忍受它).

我正在使用warble来构建.war文件,一旦我手动复制并部署它,应用程序就会部署并运行正常.我想要更简单,更自动化的东西来实现它.

有人这样做过吗?网络上的文档似乎很薄.

小智 15

我正在使用JRuby运行Rails项目并部署到Tomcat服务器.我选择使用Capistrano进行部署,因为它可以自动化所有内容.我不得不对Capistrano的部署生命周期进行一些小修改,以使其在Tomcat上运行:

第1步:我在Capistrano更新代码后创建了一个在服务器上运行的warble任务:

desc "Run the warble command to deploy the site"
namespace(:deploy) do
  task :warble do
    run ". ~/.profile;cd #{release_path};warble"
  end
end
Run Code Online (Sandbox Code Playgroud)

并使用以下方法将其挂钩到Capistrano生命周期:

after 'deploy:update_code', 'deploy:warble'
Run Code Online (Sandbox Code Playgroud)

我的Tomcat服务器有一个指向#{release_path}/tmp/warwarble创建的目录的符号链接.如果您不喜欢这样,可以轻松修改warble任务,将war文件移动到Tomcat目录中.

第2步:我覆盖了deploy:start和deploy:stop任务,以便他们启动Tomcat服务器而不是Mongrel服务器:

desc "Starts the Tomcat Server"
namespace(:deploy) do
  task :start do
    sudo "#{tomcat_home}/bin/startup.sh"
  end
end

desc "Shutdown the Tomcat Server"
namespace(:deploy) do
  task :stop do
    sudo "#{tomcat_home}/bin/shutdown.sh"
  end
end
Run Code Online (Sandbox Code Playgroud)

我使用MRI而不是JRuby解释器运行Capistrano任务.


Lar*_*ren 3

我在这方面没有太多经验,所以我不知道是否可以给你最好的方法,但如果 Capistrano 不起作用,并且你不能单独安装 MRI 来运行它,你可以只剩下几个选择:

尝试运行普通 Rake 并编写自己的部署目标: http://www.gra2.com/article.php/deploy-ruby-on-rails-applications-rake

或者使用 Ant 或 Maven。

或者,如果您只需部署到一台服务器,您可以将两个 Ruby 脚本组合在一起 - 一个在服务器上侦听关闭/启动请求,另一个运行到本地:发送关闭、scp 文件、发送启动。

顺便问一下,您是否向 JRuby 团队提交了在 Capistrano 中发现的任何集成错误?我确信他们会很乐意做出任何贡献。:)