由于 Ruby China 实际场景有很多特性,我在开发的时候并没有太多考虑其他人使用的兼容,所以保险起见,你一定要紧跟我的每个 commit,随时关注,不然有时候数据有大变动的时候或许你的旧数据无法跟上。
抱歉,由于一些原因,我无法对与这些大变动正对其他人使用做兼容。
@huacnlee 昨天按你的教程把代码版本跟上来了,但是个人资料页(http://localhost:3000/account/edit)的头像不能正常显示了,我看了一下图像的链接是: http://gravatar.com/avatar/.png?s=120&d=404
请问这个问题我要怎么改正?谢谢
def email=(val)
self.email_md5 = Digest::MD5.hexdigest(val || "")
self[:email] = val
end
最后找到问题,似乎是 email_md5 没有值,上面那个函数在 app/models/user.rb 里面,我现在对这种跟 C++ 很大出入的函数还是有点头大,不知道 @huacnlee 能不能讲解一下,谢谢。
@Peter 看这个 Commit,用这个 Migration 文件 https://github.com/ruby-china/ruby-china/commit/f70159d5baa05b4c1bf87320bca75ccc044612a3
谢谢 @huacnlee 回复,我是把所有用户都删除了再注册新用户来试的,看 4 楼的链接,很明显是那个 md5 出了问题,我如果直接把生成 md5 的代码放在 users_helper.rb 里面,头像就能正常显示。
请问这个函数是不是用户一登录就会调用啊?
def email=(val)
。。。
end
网上找了一下, def email=(val)
应该就是 setter 的作用,也就是说用户注册给 email 赋值的时候,这个函数会提前把email_md5
先赋值了。
我奇怪的是,为什么email_md5
是空的,这个字段文件开头也是定义过了的。
#7 楼 @huacnlee 我在服务器上面部署过头像代理的,有一些特别的处理。能告知什么特别处理吗? http://gravatar.com/avatar/.png?s=120&d=404这是不能访问的。
换成 ruby-china.org 就行。
以下是我加在 Nginx 里面的配置
location /avatar
{
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://gravatar.com;
proxy_cache gravatar;
proxy_cache_valid 200 302 300d;
proxy_cache_valid 404 502 1m;
expires 7d;
}
最后现象是: http://gravatar.com/avatar/dcac77909cd7f6c5818348b486a8e204.png?s=120&d=404 http://我的Servername/avatar/dcac77909cd7f6c5818348b486a8e204.png?s=120&d=404 这两个都不能访问提示 404 而把不能访问的 url 替换成http://ruby-china.org/avatar/dcac77909cd7f6c5818348b486a8e204.png?s=120&d=404 却可以访问。应该是你在 nginx 做了特殊处理。能透露一下吗?
Gravatar 上的头像如果没有自定义头像,会 404 错误。 http://ruby-china.org/avatar/dcac77909cd7f6c5818348b486a8e204.png?s=120&d=404
像这个地址的默认头像,在 Gravatar 提示找不到。
location /avatar {
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://gravatar.com;
proxy_cache ruby_china;
proxy_cache_valid 200 302 300d;
proxy_cache_valid 404 502 5m;
expires 7d;
proxy_intercept_errors on;
error_page 404 = /avatar.png;
}
#19 楼 @huacnlee location /avatar error_page 404 = /avatar.png; 这两个都用 avatar 会有问题吗? 我在我的环境下试验了下,每次请求 http://testerhome.com/avatar.png 都会跳转到 http://en.gravatar.com/ 去。所以我把 avatar.png 改成 gavatar.png error_page 404 = /avatar.png; 换成了 error_page 404 = /gavatar.png; 这样就好了。不知道你是怎么配置的?