【问题标题】:How to upload a WAR file on Tomcat 7 cookbook by Chef?如何通过 Chef 在 Tomcat 7 食谱上上传 WAR 文件?
【发布时间】:2014-02-01 09:17:21
【问题描述】:

我正在尝试在我的 Tomcat 7 上部署一个 War 文件,该文件由 CHEF 上的食谱安装。 但是,我在任何论坛上都找不到我的问题的单一答案。我不知道该怎么做!我正在使用 Ubuntu 服务器 12.10。 我使用的配方是https://github.com/solarvm/tomcat7-cookbook

【问题讨论】:

标签: java tomcat tomcat7 chef-infra ubuntu-server


【解决方案1】:

在 chef 中执行此操作时要记住的一个非常重要的部分是使用保护条件,以防止 chef 在每次运行时都继续部署文件。 正如上面解释的步骤很好,但是当你在 chef 中编码时,它会在每次运行和部署中不断复制文件,除非你有保护条件。

以下面的例子为例,厨师将在每次运行中执行此操作。

# Extract
execute "tar" do
    user "#{tc7user}"
    group "#{tc7group}"
    installation_dir = "#{tc7target}"
    cwd installation_dir
    command "tar zxf /tmp/#{tc7tarball}"
    action :run
end

要防止厨师在每次运行时执行,请使用 creates 属性和正在创建的文件的完整路径参数。下一次厨师运行将看到该文件已创建并跳过它。

【讨论】:

    【解决方案2】:

    简单的做法是使用service资源停止Tomcat,使用bash资源或文件资源复制WAR文件,然后使用service资源重新启动Tomcat。

    您尝试使用的那本说明书不进行 WAR 文件部署。但我发现了这个 - https://github.com/poise/application_java - 可以完成这项工作。

    对于它的价值,我认为您也可以找到更好的 Tomcat 安装手册。首先,在 Opscode 社区食谱site 上有一个“tomcat”配方,可以处理 Tomcat 7。

    (提示:不要只使用通过 Google 找到的第一本食谱。在 Github 上搜索,并尝试评估食谱的功能和质量)

    【讨论】:

    • 我试过这个,但我得到了这个错误:Error executing action create` on resource 'template[/usr/local/jenkins/shared/jenkins.xml]' Chef::Exceptions::FileNotFound Cookbook 'application_java' (3.0.1) 不包含以下任何位置的文件:templates/ubuntu-13.10/jenkins-context.xml.erb templates/ubuntu/jenkins-context.xml.erb templates/default/jenkins-context .xml.erb 本食谱确实包含:['/opt/chef-repo/cookbooks/application_java/templates/default/context.xml.erb']`
    • 听起来您指定了“context_template”属性,但没有根据 Chef 模板匹配规则提供匹配的模板。我不相信食谱的这个功能是否得到了正确实现。
    【解决方案3】:

    您是否已经找到 $tomcat/webapps/ 文件夹?

    手动热部署和更新的步骤。为了避免可能的冲突,您应该做一个临时的 mywebapp.war.zip 文件名技巧。多年来我在 linux 和 windows 中使用的技巧。

    • 将 myapp.war 复制到 $tomcat/webapps/myapp.war.zip 文件名。 Tomcat 会忽略它。
    • 将 myapp.war.zip 重命名为 myapp.war 文件名。 Tomcat 找到了一个新的 Web 应用程序。
    • 等待几秒钟,你应该找到由tomcat创建的$tomcat/webapps/myapp/提取文件夹。 war 文件已自动解压,现在可用。
    • 浏览到http://localhost:8080/myapp/ URL 地址

    使用覆盖技巧更新现有的 Web 应用程序。

    • 将 myapp.war 复制到 $tomcat/webapps/myapp.war.zip 文件名
    • 将 myapp.war.zip 重命名为 myapp.war 文件名,强制覆盖现有文件。
    • 等待几秒钟,您应该会看到 $tomcat/webapps/myapp/ 文件夹时间戳已更新
    • 浏览到http://localhost:8080/myapp/ URL 地址

    或者使用删除复制技巧更新现有的 Web 应用程序。

    • 将 myapp.war 复制到 $tomcat/webapps/myapp.war.zip 文件名
    • 删除现有的 myapp.war 文件名
    • 等待几秒钟,您应该会看到 $tomcat/webapps/myapp/ 文件夹被删除
    • 将 myapp.war.zip 重命名为 myapp.war 文件名
    • 等待几秒钟,你应该找到由tomcat创建的$tomcat/webapps/myapp/提取文件夹。 war 文件已自动解压,现在可用。
    • 浏览到http://localhost:8080/myapp/ URL 地址

    临时 war.zip 文件名的原因是确保文件在 Tomcat 接触之前完全复制到目标文件夹。将大文件直接复制到 .war 文件名可能会触发 Tomcat 读取一半大小的文件内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-13
      • 1970-01-01
      • 1970-01-01
      • 2018-12-01
      • 1970-01-01
      • 2014-11-06
      • 1970-01-01
      相关资源
      最近更新 更多