Google App Engine本地开发服务器无法路由到远程云存储分区

时间:2016-07-06 22:44:00

标签: python google-app-engine google-cloud-storage

我正在尝试通过dev_appserver.py开发服务器访问托管在远程云存储桶上的文件。

这个直接链接到谷歌云存储工作:

https://leanplum-wordpress.storage.googleapis.com/leanplum-black.svg

其中本地通过dev_appserver不会:

http://localhost:8080/_ah/gcs/leanplum-black.svg

日志输出:

INFO     2016-07-06 22:37:16,461 module.py:788] default: "GET /_ah/gcs/leanplum-black.svg HTTP/1.1" 200 116

我正在运行这样的开发服务器:

dev_appserver.py --default_gcs_bucket_name=leanplum-wordpress .

怎么了?

3 个答案:

答案 0 :(得分:2)

您需要确保将使用您的Google云项目配置身份验证,并且客户端将连接到生产Google云端存储而不是本地开发(默认情况下会在检测到本地开发服务器运行时发生)。 / p>

请参阅here

答案 1 :(得分:0)

我认为您需要包含存储桶名称:

    localhost:port/_ah/gcs/bucket_name/file_suffix 

默认情况下端口为8080,文件写入:/ bucket_name / file_suffix

看来你去了:

   http://localhost:8080/_ah/gcs/leanplum-black.svg

但需要包含存储桶名称,可能是 leanplum-wordpress

   http://localhost:8080/_ah/gcs/leanplum-wordpress/leanplum-black.svg

请注意,我在文档中的任何位置都没有找到它。这个问题帮助我猜测我需要在网址中包含存储桶名称,所以我希望这也有助于其他人!

答案 2 :(得分:-1)

我们仍然遇到这个问题。我们认为这是一个源自Appengine Wordpress插件的问题。

我们提出了以下解决方法来正确加载图片:

在Google Chrome中创建一个Bookmarklet并添加以下网址:

javascript:var start = var targetUrls = ["//" + window.location.host + "/wp-content/uploads/","//" + window.location.host + "/_ah/gcs/bucket-name/"];var htmlAttributes = ["src", "srcset"];jQuery("img").each(function(index, img) {targetUrls.forEach(function(pattern) {htmlAttributes.forEach(function(htmlAttr) {var htmlObj = jQuery(img).attr(htmlAttr);if (htmlObj) {jQuery(img).attr(htmlAttr, htmlObj.replace(new RegExp(pattern, "g"), "//bucket-name.storage.googleapis.com/"));}});});});

完整代码:

var targetUrls = [
    "//" + window.location.host + "/wp-content/uploads/",
    "//" + window.location.host + "/_ah/gcs/bucket-name/"
];
var htmlAttributes = ["src", "srcset"];
jQuery("img").each(function(index, img) {
    targetUrls.forEach(function(pattern) {
        htmlAttributes.forEach(function(htmlAttr) {
            var htmlObj = jQuery(img).attr(htmlAttr);
            if (htmlObj) {
                jQuery(img).attr(htmlAttr, htmlObj.replace(new RegExp(pattern, "g"), "//bucket-name.storage.googleapis.com/"));
            }
        });
    });
});