【问题标题】:What's the best way to deploy a JRuby on Rails application to Tomcat?将 JRuby on Rails 应用程序部署到 Tomcat 的最佳方式是什么?
【发布时间】:2010-09-13 22:38:50
【问题描述】:

我正在寻找将 Ruby on Rails 应用程序(在 JRuby 上运行)部署到 Tomcat 实例以进行测试的方法。

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

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

以前有人做过吗?网络上的文档似乎很薄。

【问题讨论】:

    标签: ruby-on-rails ruby tomcat jruby capistrano


    【解决方案1】:

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

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

    或者使用 Ant 或 Maven。

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

    顺便问一下,您是否已将发现的 Capistrano 集成错误提交给 JRuby 团队?我相信他们会很高兴有任何贡献。 :)

    【讨论】:

    • 太好了,这种方法最终成为最简单的方法。最终使用 plink.exe 而不是 SSH(在 Windows 上)。我已经修复了一些我遇到的 capistrano 问题,以及一些我没有修复的其他错误。我会把它们提交给 capistrano :)
    【解决方案2】:

    可能值得一看 'Vlad the deployer',它将 remote_task 添加到 Rake 允许您在远程服务器上运行任务。不过,就我个人而言,我更喜欢在服务器上有一个标准的 Rake 任务,通过 ssh 进入并运行该任务——然后它会执行 svn 结帐,制作 WAR 文件,等等……

    【讨论】:

      【解决方案3】:

      我可能会为此使用 Ant。毕竟,它只是另一个 WAR 文件,对吧?我不知道您使用的是哪个版本的 Tomcat,但版本 4.1x comes with an Ant task for deploying to Tomcat

      【讨论】:

        【解决方案4】:

        我正在使用 JRuby 运行 Rails 项目并部署到 Tomcat 服务器。我选择使用 Capistrano 进行部署,因为它几乎可以自动执行所有操作。为了让它在 Tomcat 上运行,我不得不对 Capistrano 的部署生命周期进行一些小的修改:

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

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

        并使用以下方法将其连接到 Capistrano 生命周期中:

        after 'deploy:update_code', 'deploy:warble'
        

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

        第 2 步:我覆盖了 deploy:startdeploy: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
        

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

        【讨论】:

          【解决方案5】:

          有一些用于部署到 Tomcat 的 Capistrano 配方——我将其中的一个构建到一个名为 capistrano-tomcat 的 gem 中。它需要您构建的 WAR(可能使用 Warbler)并在远程服务器上部署和启动 Tomcat 实例。

          来源在 Github:http://github.com/rhunter/capistrano-tomcat

          【讨论】:

            猜你喜欢
            • 2011-03-18
            • 2010-09-05
            • 2023-03-29
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-05-26
            • 2010-09-30
            • 1970-01-01
            相关资源
            最近更新 更多