我在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年以来不变的标准版本吗?
答案 0 :(得分:2)
结论:
自动生成的下载由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)
手动附加二进制文件托管在Amazon Web Services中。要求按JInstallerHelper::downloadPackage下载这些内容会产生回复505 HTTP Version Not Supported
,但我们尚未找到解决此问题的有效方案。
最后,只要您使用自动生成的下载,就可以使用GitHub作为Joomla Extensions更新服务器(非常方便)。
GitHub提供版本控制服务,而不是更新服务器,因此构建可下载档案的方式将来可能会再次发生变化。
在我们找到一种方法如何使用Joomla Installer下载附加二进制文件(其中一个人可以完全控制存档的名称和结构)之前,不应将GitHub视为Joomla扩展更新的可靠工具。我相信有一种方法可以修补JInstaller包以与AWS兼容(使用命令行curl
下载工作正常)。
感谢您ccpl和RandolphCarter获取有关此答案的信息。
答案 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
中进行黑客攻击我试过
CURL_HTTP_VERSION_1_1
CURLOPT_SSL_VERIFYPEER
(在其他S3情况下有用)cacert.pem
更新为the current one 没有任何效果。
到目前为止,所有这些似乎都在AWS方面,我不知道所有的S3访问控制可能在他们的S3存储桶的GitHub设置中有一些东西。
答案 2 :(得分:0)
我没有直接的工作方法(使用发布资产进行自动更新),因此我现在通过将文件放入git存储库来实现解决方案。
我知道,这不是一个理想的解决方案,但至少可行。