【问题标题】:Riak CS returns "s3.amazonaws.com" no matter what is in cs_root_host无论 cs_root_host 中有什么,Riak CS 都会返回“s3.amazonaws.com”
【发布时间】:2015-09-27 17:42:18
【问题描述】:

cs_root_host 设置正确:

grep root_host /var/lib/riak-cs/generated.configs/app.2015.07.09.13.59.07.config
    {cs_root_host,"s3.example.com"},

但是当我上传文件时:

s3cmd put test.jpg s3://images --acl-public

我得到回报:

对象的公共 URL 是:http://images.s3.amazonaws.com/test.jpg

问题出在哪里?

添加: 这是输出 - 一切看起来都很好,除了最后一行:

(example.com 只是替换我不想公开的真实域)

s3cmd -d -c .s3cfg put newfile.jpg s3://images --acl-public 调试:ConfigParser:读取文件'.s3cfg' 调试:ConfigParser:access_key->YD...17_chars...U 调试:ConfigParser:bucket_location->RU 调试:ConfigParser:cloudfront_host->cloudfront.amazonaws.com 调试:ConfigParser:cloudfront_resource->/2010-07-15/distribution 调试:ConfigParser:default_mime_type->binary/octet-stream 调试:ConfigParser:delete_removed->False 调试:ConfigParser:dry_run->False 调试:ConfigParser:编码-> UTF-8 调试:ConfigParser:加密->假 调试:ConfigParser:follow_symlinks->False 调试:ConfigParser:强制->假 调试:ConfigParser:get_continue->False 调试:ConfigParser:gpg_command->/usr/bin/gpg 调试:ConfigParser:gpg_decrypt->%(gpg_command)s -d --verbose --no-use-agent --batch --yes --passphrase-fd %(passphrase_fd)s -o %(output_file)s %(input_file )s 调试:ConfigParser:gpg_encrypt->%(gpg_command)s -c --verbose --no-use-agent --batch --yes --passphrase-fd %(passphrase_fd)s -o %(output_file)s %(input_file )s 调试:ConfigParser:gpg_passphrase->...-3_chars... 调试:ConfigParser:guess_mime_type->True 调试:ConfigParser:host_base->s3.example.com 调试:ConfigParser:host_bucket->%(bucket)s.s3.example.com 调试:ConfigParser:human_readable_sizes->False 调试:ConfigParser:list_md5->False 调试:ConfigParser:log_target_prefix-> 调试:ConfigParser:preserve_attrs->True 调试:ConfigParser:progress_meter->True 调试:ConfigParser:proxy_host->127.0.0.1 调试:ConfigParser:proxy_port->80 调试:ConfigParser:递归->假 调试:ConfigParser:recv_chunk->4096 调试:ConfigParser:reduce_redundancy->False 调试:ConfigParser:secret_key->kG...37_chars...= 调试:ConfigParser:send_chunk->4096 调试:ConfigParser:simpledb_host->sdb.amazonaws.com 调试:ConfigParser:skip_existing->False 调试:ConfigParser:socket_timeout->10 调试:ConfigParser:urlencoding_mode->normal 调试:ConfigParser:use_https->False 调试:ConfigParser:详细程度->警告 调试:更新 Config.Config 编码 -> UTF-8 调试:更新 Config.Config follow_symlinks -> False 调试:更新 Config.Config 详细程度 -> 10 调试:使用 UTF-8 对“put”进行统一编码 调试:使用 UTF-8 对“newfile.jpg”进行统一编码 调试:使用 UTF-8 对 's3://images' 进行统一编码 调试:命令:放 信息:正在编译本地文件列表... 调试:使用 UTF-8 对 u'' 进行 DeUnicodising 调试:使用 UTF-8 对 u'newfile.jpg' 进行 DeUnicodising 调试:使用 UTF-8 对“newfile.jpg”进行统一编码 调试:使用 UTF-8 对“newfile.jpg”进行统一编码 信息:应用--exclude/--include 调试:检查:newfile.jpg 调试:通过:newfile.jpg INFO:摘要:要上传的 1 个本地文件 调试:内容类型设置为“图像/JPEG” 调试:字符串“newfile.jpg”编码为“newfile.jpg” 调试:SignHeaders:'PUT\n\nimage/jpeg\n\nx-amz-acl:public-read\nx-amz-date:Fri, 10 Jul 2015 09:55:37 +0000\n/images/newfile。 jpg' 调试:CreateRequest:资源[uri]=/newfile.jpg 调试:使用 UTF-8 对“newfile.jpg”进行统一编码 调试:SignHeaders:'PUT\n\nimage/jpeg\n\nx-amz-acl:public-read\nx-amz-date:Fri, 10 Jul 2015 09:55:37 +0000\n/images/newfile。 jpg' newfile.jpg -> s3://images/newfile.jpg [1 of 1] 调试:get_hostname(图像):images.s3.example.com 调试:format_uri():http://images.s3.example.com/newfile.jpg 32600 of 32600 100% in 0s 14.49 MB/sDEBUG: 响应: {'status': 200, 'headers': {'content-length': '0', 'server': 'nginx', 'connection': 'keep -alive', 'etag': '"89e39f454c69a1ce1fadec3a222fc292"', 'date': 'Fri, 10 Jul 2015 09:55:37 GMT', 'content-type': 'text/plain'}, 'reason': '好的','数据':'','大小':32600} 32600 of 32600 100% in 0s 391.54 kB/s 完成 调试:MD5总和:计算= 89e39f454c69a1ce1fadec3a222fc292,收到=“89e39f454c69a1ce1fadec3a222fc292” 对象的公共 URL 是:http://images.s3.amazonaws.com/newfile.jpg

【问题讨论】:

  • 最好添加整个 s3cmd 配置文件并通过添加 -d 选项来调试 s3cmd 的输出。
  • “公共 URL”是什么意思?似乎 s3cmd 从 s3cmd 的配置或其他东西输出了该行(我刚刚略读了s3cmdS3Uri.py)。 S3 API 没有此类元素或标头来指示公共 URL。

标签: amazon-s3 riak-cs


【解决方案1】:

这不是 Riak CS 问题。 s3cmd 本身产生公共 url 字符串 并打印出来。

对于我的环境,使用提交 master 分支的 s3cmd 7bdefc81823699069706ea3680bfa65ec8ad3db5(今天刚取,2015-07-14), 它显示(似乎)正确的 URL。

% ~/g/s3cmd/build/scripts-2.7/s3cmd -c .s3cfg.15018.alice put rebar.config -P s3://test/a
rebar.config -> s3://test/a  [1 of 1]
2791 of 2791   100% in    0s   196.88 kB/s  done
Public URL of the object is: http://test.s3.example.com/a

从 s3cmd 的源代码来看,它似乎使用了host_buckethost_base 配置取决于存储桶名称(或其他配置。)

关于我的环境的一些其他细节

  • s3cmd 配置:host_base = s3.example.comhost_bucket = %(bucket)s.s3.example.com
  • 服务器是开发分支的Riak CS(提交1f954aaae45429923f65fdad40c7916a55ab79f3
  • Riak CS 配置:cs_root_host = s3.example.com

【讨论】:

  • 谢谢你的帮助,小野!
猜你喜欢
  • 1970-01-01
  • 2016-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-17
  • 2016-10-30
  • 2016-12-26
  • 2016-04-27
相关资源
最近更新 更多