【问题标题】:Error patching Magento 1.7.1 Hunk #1 Failed at修补 Magento 1.7.1 Hunk #1 时出错
【发布时间】:2015-04-17 15:27:08
【问题描述】:

我在 Magento Dashboard v.1.7.0.2 (2 important security patches (SUPEE-5344 and SUPEE-1533)...) 中看到最后一个 Critical Reminder 通知

所以,我在其他 Magento 中正确下载并安装了它们(例如 1.6.01.6.1),但我在这个版本中遇到了这些错误 1.7.0.2

[root@oc1 httpdocs]# sh PATCH_SUPEE-1533_EE_1.12.x_v1-2015-02-10-08-19-16.sh
Checking if patch can be applied/reverted successfully...
ERROR: Patch can't be applied/reverted successfully.

patching file app/code/core/Mage/Adminhtml/Block/Dashboard/Graph.php
Hunk #1 FAILED at 444.
1 out of 1 hunk FAILED -- saving rejects to file app/code/core/Mage/Adminhtml/Block/Dashboard/Graph.php.rej
patching file app/code/core/Mage/Adminhtml/controllers/DashboardController.php
Hunk #1 FAILED at 92.
1 out of 1 hunk FAILED -- saving rejects to file app/code/core/Mage/Adminhtml/controllers/DashboardController.php.rej

我在搜索并找到了这个Magento patch failing to install post,但它对我不起作用

我在 windows、Mac 和 Linux 上下载 .sh 文件,结果是一样的……有什么想法吗?

【问题讨论】:

标签: security magento patch


【解决方案1】:

我在本地机器上使用 Windows。服务器当然是Linux。我使用 Git 进行版本控制。

长话短说:尝试使用dos2unix 实用程序来尝试使 .php 文件的行尾与 .sh 补丁文件匹配。 (我认为您也可以在 .sh 文件上运行 dos2unix 或在 .sh 文件上运行 unix2dos - 一些组合使它们都相同)。

虽然我认为您的错误消息与我的看起来有些不同。实际上,您查看过“拒绝文件”吗?如果这不是行尾故障,您能想到 1.6 和 1.7 安装之间有什么不同吗? (我已经使用我在此处描述的方法修补了 1.7.0.2 和 1.9.0.1)。如果您检查 Graph.php 文件,其中是否有任何编辑?

这里有更多关于什么对我有用:

我使用了 Cygwin(Gitbash 似乎在 Linux 与 Windows 文件路径方面遇到了问题,并给出了错误 /app/etc must exist)。此外,我必须以管理员身份运行 Cygwin 来解决文件权限错误(这很奇怪,可能是我的设置所独有的)。

但我需要做的主要事情是在补丁尝试diff 的文件上运行dos2unix。我通过编辑 .sh 补丁文件来做到这一点,您可以在文件末尾看到这些补丁文件包含将要更改的文件的路径。

所以我编辑了 .sh 文件,在注释 # 5. File pathes 之前的第 66 行添加了这两行:-

# extra steps for windows CRLF:
dos2unix app/code/core/Mage/Adminhtml/Block/Dashboard/Graph.php
dos2unix app/code/core/Mage/Adminhtml/controllers/DashboardController.php

您可能需要考虑计划 B 并手动编辑文件;变化不大。

不过,补丁 5344 确实还有一些变化。为此,我在文件PATCH_SUPEE-5345_CE_1.7.0.2_v1-2015-02-10-08-11-22.sh 中的注释# 5. File pathes 之前添加了这些行:-

#  extra steps for windows CRLF:
dos2unix lib/Varien/Db/Adapter/Pdo/Mysql.php
dos2unix app/code/core/Mage/XmlConnect/Model/Observer.php
dos2unix app/code/core/Mage/Oauth/controllers/Adminhtml/Oauth/AuthorizeController.php
dos2unix app/code/core/Mage/Core/Controller/Request/Http.php
dos2unix app/code/core/Mage/Admin/Model/Observer.php

这对我有用。我阅读了一些 Stack Overflow 的答案来提出这个解决方案。似乎“补丁”命令对行尾非常敏感。您可能会尝试的另一件事是将 -w 标志添加到 diff 命令中(再次通过编辑 .sh 文件),这可能使 diff 忽略行首和行尾的空白,但它对我不起作用。 http://unixhelp.ed.ac.uk/CGI/man-cgi?diff

作为最后一个问题,我要注意我需要通过重新运行 Cygwin setup-x86.exe“安装或更新”程序来添加 patch 命令到 Cygwin,以添加包含 patch 的开发包。

【讨论】:

    【解决方案2】:

    如果在 Magento 中修补的文件的行尾与修补文件本身不同,您将看到上述 HUNK 错误。

    例如:

    • 正在修补的文件:Windows 行结尾
    • 补丁文件:Unix 行尾

    如果是这种情况,您需要更改与运行它的系统不匹配的文件的行尾。

    即:

    • 如果在 Linux 上运行,请确保两者都有 Unix 行结尾。
    • 如果在 Windows 上运行,请确保两者都有 Windows 行尾。

    您可以在 Sublime 编辑器中轻松完成此操作:查看 > 行尾 >(选择正确的一个)

    如果您在 Linux 上运行,并且您正在修补的文件具有 Windows 行尾(我的出于某种原因,显然 PHP 不介意),将补丁文件更改为也具有 Windows 行尾会导致这个神秘的错误:

    $ sh PATCH_SUPEE-2629_EE_1.12.0.0_v1.sh
    : command not found_1.12.0.0_v1.sh: line 7:
    'ATCH_SUPEE-2629_EE_1.12.0.0_v1.sh: line 9: syntax error near unexpected token `{
    'ATCH_SUPEE-2629_EE_1.12.0.0_v1.sh: line 9: `_check_installed_tools() {
    

    详情请见Magento patch failing to install

    【讨论】:

      【解决方案3】:

      我的解决方案也使用 dos2unix,但这对我有用:

      步骤 1

      在 linux 终端中我运行了cat PATCH------something---.sh | grep "diff ",这会导致补丁中涉及的所有文件。

      提示:如果文件很多,请添加> diff_files.txt并使用浏览器下载/访问。

      第二步

      diff with file paths 说明复制到 notepad++ (我假设您使用的是 Windows,这就是行尾出现的原因)

      你会得到这样的东西:

      diff --git app/code/core/Mage/Adminhtml/Helper/Sales.php app/code/core/Mage/Adminhtml/Helper/Sales.php diff --git app/code/core/Mage/Core/Model/Config.php app/code/core/Mage/Core/Model/Config.php diff --git lib/Varien/File/Uploader.php lib/Varien/File/Uploader.php

      如您所见,文件路径是重复的;没关系。

      第三步

      现在只需将diff --git 替换为dos2unix,将结果复制并粘贴到ssh 终端中,记住您需要位于Magento 根文件夹中。 dos2unix 会调用同一个文件两次,但是没有问题。

      dos2unix app/code/core/Mage/Adminhtml/Helper/Sales.php app/code/core/Mage/Adminhtml/Helper/Sales.php dos2unix app/code/core/Mage/Core/Model/Config.php app/code/core/Mage/Core/Model/Config.php dos2unix lib/Varien/File/Uploader.php lib/Varien/File/Uploader.php

      提示:也许最后一行在终端中需要一个额外的return

      结论

      这样可以避免在所有文件中运行 dos2unix,这对我来说似乎更安全。接下来,像 Magento 说明一样调用sh PATCH----something--.sh

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-09-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-25
        • 1970-01-01
        • 2012-02-03
        相关资源
        最近更新 更多