Gravatar 之前一直是由 Ruby China 的服务器做反向代理来实现的,但实际上偶尔存在一些稳定性问题,比如今天; 另外其实我们一直很想设定一个限制:没头像不允许发帖! 而 Gravatar 带来的问题是,从程序上无法检测用户到底有没有头像。
鉴于上面的原因,我们讨论决定还是去掉 Gravatar,改用 Discourse 那样基于账号名称生成默认头像的方式,这个是用 letter_avatar 来实现的,原理和昨天我实现的验证码功能类似,调用 ImageMagick 生成图片。
PS: 新调整的头像,文字有点歪,下个发布修正一下...
我更喜欢 ruby_identicon 这个 gem ^_^
我加了个判断,如果有头像,就不显示这个提示了。
can create 有两个条件,头像是其中一个。
+ <% if current_user && !current_user.avatar? %>
<div class="panel panel-default clearfix">
<div class="panel-body">
<p><%= t('topics.have_no_avatar')%></p>
<%= link_to t('common.upload'), edit_user_registration_path, class: 'btn btn-warning btn-block' %>
</div>
</div>
+ <% end %>
我觉得自己搭反代挺好的啊,做个缓存,头像没有的问题,以及加载转圈的问题都好了,也没有用户再吐槽了。
proxy_cache_path /disk3/gravatar_cache levels=1:2 keys_zone=gravatar:10m inactive=7d max_size=2g ;
server{
listen 80;
listen 443 ssl;
ssl_certificate /usr/local/tengine/conf/ssl.crt;
ssl_certificate_key /usr/local/tengine/conf/ssl.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'AES128+EECDH:AES128+EDH:!aNULL';
server_name gravatar.oschina.net ;
location / {
expires 30d;
valid_referers none blocked *.oschina.net localhost;
if ($invalid_referer) {
rewrite ^/ https://git.oschina.net/logo.gif;
}
proxy_cache gravatar;
proxy_cache_valid 200 302 1h;
proxy_cache_valid 404 1m;
add_header X-Cache "$upstream_cache_status";
proxy_redirect off;
proxy_pass https://en.gravatar.com;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Accept-Encoding "";
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header User-Agent $http_user_agent;
}
access_log off;
error_log /dev/null;
}
你说的这个“今天出现的稳定性问题”具体是什么问题呢?说不定以后也会碰到,可以预防下 :)