【问题标题】:OpsWorks war deployment failure from S3来自 S3 的 OpsWorks 战争部署失败
【发布时间】:2014-12-10 23:54:37
【问题描述】:
  1. 我有一个战争文件,。 myapp.war(它恰好是一个 grails 应用,但这并不重要)
  2. 我将它上传到一个 s3 存储桶,例如 us-west-2 中的 myapp
  3. 我使用 S3 存储库类型设置了 OpsWorks:

    存储库类型:S3 存储库 URL:https://myapp.s3-us-west-2.amazonaws.com/myapp.war Access key ID:对上述bucket有读权限的key 秘密访问密钥:此密钥的秘密

  4. 部署到 Java 层中的实例 (Tomcat 7)

  5. 所有指示灯都为绿色,部署成功
  6. 但该应用并未实际部署
  7. 进入实例并查看 /usr/share/tomcat7/webapps 我找到了一个名为“myapp”的目录。在这个目录中有一个名为“archive”的文件。 'archive' 看起来是一个 war 文件,但它没有命名为 'archive.war',并且它位于 webapps 的子目录中,因此 tomcat 无论如何也不会部署它。

现在,OpsWorks 文档说存档应该是“zip”文件。但是:

  1. 将 myapp.war 压缩到 zip 存档“myapp.war.zip”并更改此文件的路径会导致“myapp”包含“myapp.war”。没有部署,因为 tomcat 不在 'webapps/myapp' 中寻找战争文件

  2. 将“myapp.war”的名称更改为“myapp.zip”并更改存储库路径会导致“myapp”再次包含单个文件“存档”。

所以。谁能描述如何正确地从 S3 向 OpsWorks 提供战争文件?

【问题讨论】:

    标签: aws-opsworks


    【解决方案1】:

    this wiki 页面您可以看到WAR 文件只是一个特殊的JAR 文件。如果您检查一下 JAR 是什么 here,那么您会看到它只是 zipped 编译的 java 代码。

    这位超级用户question 还涉及 .WAR 与 .zip 业务。基本上,WAR 只是一个特殊的 ZIP。因此,当您上传 WAR 时,您正在上传 ZIP。

    确保它是 S3 存储桶中的 WAR 文件。

    提供指向 S3 WAR 文件的完整链接。为此,请右键单击 S3 中的 WAR 文件并选择 Properties,然后复制链接。

    【讨论】:

    • java jar 工具制作 jars、wars 等。是的,它们只是带有一些常规内容的 zip 文件,例如清单。但是这些 zip 文件(命名为 war 或 jar 或其他)在这种情况下不起作用。事实证明,如果您分解使用 jar 工具制作的 war 文件,然后使用 zip 工具(而不是 jar 工具)压缩生成的内容,然后使用 .war 扩展名重命名它——然后,它就可以工作了。
    • 我回答的最后一部分是否没有回答您的问题`谁能描述如何正确地从 S3 向 OpsWorks 提供战争文件?` 我没有遇到需要重命名或重命名的问题部署到 OpsWorks 时压缩我的 .WAR 文件。但我确实认为 OpsWorks 可能很挑剔......
    • 您的答案是按照我在问题第 3 步中所做的操作。所以,不,抱歉没有帮助。
    • 你发布的是So. Can anyone describe how to properly provide a war file to OpsWorks from S3?——我回答了这个问题。但是从您接受的答案来看,您真正的问题似乎与您使用的任何构建/部署工具有关。我使用 eclipse,在 eclipse 中它是一个简单的export -> WAR 从我的 Java Web 应用程序中获取 WAR
    【解决方案2】:

    看来问题与 zip 存档的制作方式有关。

    使用 java 'jar' 工具创建的 Jars、war 等不起作用。使用 zip 工具创建的 Zip 档案,然后重命名为具有“.war”扩展名。

    这里有解释:https://forums.aws.amazon.com/thread.jspa?messageID=559582&#559582

    引用该帖子的答案:

    我们当前的提取脚本无法正确识别 WAR 文件。如果 您解压缩 WAR 文件并使用 zip 打包它,它应该可以工作,直到 我们更新我们的脚本。

    所以有效的程序是:

    1. 爆炸由你的开发环境产生的战争(在grails的情况下,战争构建清理了战争的暂存目录,所以你没有一个爆炸的战争目录来压缩你自己,你必须先解压。)
    2. 使用压缩工具压缩通过分解战争创建的目录的内容(或者,如果您的构建工具将分解的战争目录留在那里,则直接压缩它)
    3. (可选)将新的 zip 存档重命名为具有“.war”扩展名。
    4. 从原来的问题,第3步恢复过程——即将war上传到s3 bucket并
    5. 将 War 文件的 S3 路径指定为 OpsWorks 设置中的存储库。

    编辑:

    在回答完这个问题后,我发现Grails毕竟可以产生一个爆炸的war目录。

    // BuildConfig.groovy
    ...
    grails.project.war.exploded.dir = "path/to/exploded/war-directory"
    grails.war.exploded=true
    ...
    

    那个目录可以被你的构建器/部署者压缩或压缩或任何你想要的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-06
      • 1970-01-01
      • 2018-06-28
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多