两步法解决你的问题。
(1)升级您的S3cmd安装。版本1.0.x不具备设置字符集的功能。从master on github安装。 Master包含此(1)bug和此(2)bug的修补程序,这些修补程序导致无法识别早期版本中内容类型的格式和“先前定义之前调用”问题。
从主OSX上安装s3cmd请执行以下操作:
git clone https://github.com/s3tools/s3cmd.git
cd s3cmd/
sudo python setup.py install (sudo optional based on your setup)
确保您的Python库是在您的路径中加入以下到您的.profile或.bashrc或者.zshrc(再次,取决于你的系统)。
export PATH="/Library/Frameworks/Python.framework/Versions/2.7/bin:$PATH"
但如果您使用自制软件可能会导致冲突 - 所以 - 只是符号链接到可执行文件。
ln -s /Library/Frameworks/Python.framework/Versions/2.7/bin/s3cmd /usr/local/bin/s3cmd
关闭终端并重新打开。
s3cmd --version
仍将输出
s3cmd version 1.5.0-alpha3 - but its the patched version.
(2)升级后,使用:
s3cmd --acl-public --no-preserve --add-header="Content-Encoding:gzip" --add-header="Cache-Control:public, max-age=86400" --mime-type="text/html; charset=utf-8" put index.html s3://www.example.com/index.html
如果上传成功,并设置在Content-Type为“text/html的;字符集= utf-8“,但你看到这个过程中的错误:
WARNING: Module python-magic is not available...
我更喜欢没有python-magic的生活 - 我发现如果你没有专门设置mime类型,python-magic经常猜测错误。安装python-magic,但一定要在s3cmd中设置mime-type =“application/javascript”,否则python-magic会猜测它是“application/x-gzip”,如果你在本地gzip你的js。
安装python-魔法:
sudo pip install python-magic
PIP随着近期OSX升级打破了,所以你可能需要更新PIP:
sudo easy_install -U pip
这将做到这一点。所有这一切都与S3cmd同步 - 不只是放在。我建议你将s3cmd同步放入一个thor类型的任务中,这样你就不会忘记在任何特定的文件上设置mime类型(如果你对gzip文件使用python-magic)。
This is a gist of an example thor task for deploying a static Middleman site to s3.此任务允许您在本地重命名文件并使用s3cmd同步,而不是使用S3cmd put来逐个重命名它们。
来源
2013-04-25 16:08:50
DPF
感谢您的回答。 s3cmd --version显示我正在使用1.5.0-alpha1。我尝试使用--mime-type,正如你之前提出的那样,但后来我得到了一个不同的错误:UnboundLocalError:在分配之前引用的本地变量'content_encoding' – cutemachine 2013-04-26 09:52:10
更改了答案以反映只有主人 - 而不是早期的软件包解决这两个问题。 – DPF 2013-04-26 19:17:59
添加了从git repo安装s3cmd的指示 – DPF 2013-04-26 20:42:02