自动扩展更新无法处理来自github的zip文件?

时间:2014-01-07 23:17:45

标签: joomla github joomla2.5

我在github上托管了一个扩展程序,我想为其提供自动更新。但是,当我提供附加到发布的文件的URL时,Joomla只会在尝试自动更新时报告以下内容:

Fehler beim Verbindungsaufbau zum Server: Error Unknown
Ungültige Webadresse

翻译

Error in connecting to server: Error Unknown
Invalid web address

尝试通过Extensions - Install页面从Web地址安装时也是如此。 从浏览器,我可以下载文件就好了。 有人知道为什么会这样吗?这是github方面的错误,还是Joomla的错误? 或者它是github方面的一些“安全”或“安全”机制? 我该怎么做才能避免它?或者这两个人不会一起玩?

示例网址:https://github.com/codeling/bfstop/releases/download/1.2.0/pkg_bfstop-1.2.0.zip

修改

在下面的评论中插入piotr_cz提到的downloadPackage方法的补丁(gist.github.com/piotr-cz/8316210),现在回答我的Joomla安装。

解析重定向后传递给方法的网址:https://s3.amazonaws.com/github-cloud/releases/6794712/f2aa5eb4-7838-11e3-837a-c6be2639e4ca.zip?response-content-disposition=attachment%3B%20filename%3Dpkg_bfstop-1.2.0.zip&AWSAccessKeyId=AKIAISTNZFOVBIJMK3TQ&Expires=1389455424&Signature=Nnyl6TnWueTqK8bPkPXUidM8UzQ%3D

新插入的行后的网址:https://s3.amazonaws.com/github-cloud/releases/6794712/f2aa5eb4-7838-11e3-837a-c6be2639e4ca.zip?response-content-disposition=attachment; filename=pkg_bfstop-1.2.0.zip&AWSAccessKeyId=AKIAISTNZFOVBIJMK3TQ&Expires=1389455424&Signature=Nnyl6TnWueTqK8bPkPXUidM8UzQ=

响应仍然是505错误:

response: JHttpResponse Object
(
    [code] => 505
    [headers] => Array
        (
            [Date] => Sat, 11 Jan 2014 15:49:24 GMT
            [Connection] => close
            [Server] => AmazonS3
        )

    [body] =>
)

所以我认为编码并不重要。错误505确实表明http版本问题?为什么Joomla和亚马逊在HTTP版本上不一致?绝对不是HTTP专家,但是版本1.1应该是10年以来不变的标准版本吗?

3 个答案:

答案 0 :(得分:2)

结论:

  1. 自动生成的下载由GitHub的标签版本与Joomla Installer目前(2014年1月)兼容,只要存储库名称与扩展名称(元素)匹配。 Joomla Installer能够使用扩展名:

    • 直接找到文件和文件夹:

      mod_mymodule.zip:
      
      /mod_mymodule.xml
      /mod_mymodule.php
      
    • 或者文件和文件夹位于与存档同名的文件夹中(请参阅JInstallerHelper::unpack):

      mod_mymodule.zip:
      
      /mod_mymodule
      /mod_mymodule/mod_mymodule.xml
      /mod_mymodule/mod_mymodule.php
      

      这就是GitHub 标签 Releases 的构建方式。自动生成的存储库mod_mymodule下载会导致mod_mymodule-[tag/branch].zip存档mod_mymodule-[tag/branch]子文件夹。比如我们标记扩展程序1.0.0-beta

      mod_mymodule-1.0.0-beta.zip:
      
      /mod_mymodule-1.0.0-beta
      /mod_mymodule-1.0.0-beta/mod_mymodule.xml 
      /mod_mymodule-1.0.0-beta/mod_mymodule.php
      

      注意:存档的构建方式有所变化(请参阅Automatic Extension Update: Unknown Archive type

  2. 添加到GitHub 发布
  3. 手动附加二进制文件托管在Amazon Web Services中。要求按JInstallerHelper::downloadPackage下载这些内容会产生回复505 HTTP Version Not Supported,但我们尚未找到解决此问题的有效方案。

  4. 最后,只要您使用自动生成的下载,就可以使用GitHub作为Joomla Extensions更新服务器(非常方便)。

    GitHub提供版本控制服务,而不是更新服务器,因此构建可下载档案的方式将来可能会再次发生变化。

    在我们找到一种方法如何使用Joomla Installer下载附加二进制文件(其中一个人可以完全控制存档的名称和结构)之前,不应将GitHub视为Joomla扩展更新的可靠工具。我相信有一种方法可以修补JInstaller包以与AWS兼容(使用命令行curl下载工作正常)。

    感谢您ccplRandolphCarter获取有关此答案的信息。

答案 1 :(得分:1)

看起来URL被重定向到S3位置:

https://s3.amazonaws.com/github-cloud/releases/6794712/6c173582-77ef-11e3-9aec-c8994b691269.zip?response-content-disposition=attachment%3B%20filename%3Dpkg_bfstop-1.2.0.zip&AWSAccessKeyId=AKIAISTNZFOVBIJMK3TQ&Expires=1389163120&Signature=c4RdRTAUZ5%2FDHlpg0vR2ivK6lQQ%3D`

我想说这会破坏网络安装。

更新

进一步跟踪,我可以看到downloadPackage()方法捕获302 Found并尝试从新URL获取文件。此时,它会执行一个新的curl请求,其中包含一些基本的options

$options = array("10036" => "GET",
"10065" => "/Users/cppl/Sites/jdev/libraries/joomla/http/transport/cacert.pem",
"10002" => "https://s3.amazonaws.com/github-cloud/releases/6794712/f2aa5eb4-7838-11e3-837a-c6be2639e4ca.zip?response-content-disposition=attachment; filename=pkg_bfstop-1.2.0.zip&AWSAccessKeyId=AKIAISTNZFOVBIJMK3TQ&Expires=1389170600&Signature=BVlqH0hVhYGjbeKn6w/9nDn+kDg=",
"42" => "1",
"19913" => "1")

不幸的是,S3服务正在返回505

HTTP/1.1 505 HTTP Version Not Supported
Date: Wed, 08 Jan 2014 08:47:59 GMT
Connection: close
Server: AmazonS3

\JHttpTransportCurl\request中进行黑客攻击我试过

  1. 强制CURL_HTTP_VERSION_1_1
  2. 禁用SSL验证CURLOPT_SSL_VERIFYPEER(在其他S3情况下有用)
  3. cacert.pem更新为the current one
  4. all together
  5. 没有任何效果。

    到目前为止,所有这些似乎都在AWS方面,我不知道所有的S3访问控制可能在他们的S3存储桶的GitHub设置中有一些东西。

答案 2 :(得分:0)

我没有直接的工作方法(使用发布资产进行自动更新),因此我现在通过将文件放入git存储库来实现解决方案。

我知道,这不是一个理想的解决方案,但至少可行。

相关问题