Homeland 用了 ruby-china 的源码, 怎么跟着升级

Peter · 2012年07月20日 · 最后由 lihuazhang 回复于 2013年10月23日 · 4840 次阅读

@huacnlee 真是勤劳的小蜜蜂啊,最近几乎天天都在更新代码,我基于 ruby-china 在做自己的网站,可能是几周前下载的代码吧。

我想问的是,如何把 @huacnlee 最近更新的代码和我本地的代码合并呢? 我不是想要所有的代码,比如登录这一块我和 ruby-china 就很不一样了。

git 用得不好,还望高手指点

由于 Ruby China 实际场景有很多特性,我在开发的时候并没有太多考虑其他人使用的兼容,所以保险起见,你一定要紧跟我的每个 commit,随时关注,不然有时候数据有大变动的时候或许你的旧数据无法跟上。

抱歉,由于一些原因,我无法对与这些大变动正对其他人使用做兼容。

@huacnlee 不仅是勤劳的小蜜蜂,还是大好人啊,这么快就回复了,我一定紧紧跟着,谢谢

@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 能不能讲解一下,谢谢。

#4 楼 @Peter 头像这个地址前面 gravatar.com 改成 ruby-china.org 吧,就不会有问题了,我在服务器上面部署过头像代理的,有一些特别的处理

谢谢 @huacnlee 回复,我是把所有用户都删除了再注册新用户来试的,看 4 楼的链接,很明显是那个 md5 出了问题,我如果直接把生成 md5 的代码放在 users_helper.rb 里面,头像就能正常显示。

请问这个函数是不是用户一登录就会调用啊?

def email=(val)
。。。
end

网上找了一下, def email=(val) 应该就是 setter 的作用,也就是说用户注册给 email 赋值的时候,这个函数会提前把email_md5先赋值了。

我奇怪的是,为什么email_md5是空的,这个字段文件开头也是定义过了的。

#10 楼 @Peter 这个字段是中期加上的,以前没有,所以用6楼的 Migration 做了一次数据修正.

#10 楼 @Peter 新建的用户 email_md5 会自动生成出来的呀

#7 楼 @huacnlee 我在服务器上面部署过头像代理的,有一些特别的处理。能告知什么特别处理吗? http://gravatar.com/avatar/.png?s=120&d=404这是不能访问的。

换成 ruby-china.org 就行。

#13 楼 @buyhome 对,就是直接用 ruby china 的域名调用头像

#14 楼 @huacnlee

以下是我加在 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 做了特殊处理。能透露一下吗?

#14 楼 @huacnlee 新注册的用户好像是可以的,旧用户的头像 404

Gravatar 上的头像如果没有自定义头像,会 404 错误。 http://ruby-china.org/avatar/dcac77909cd7f6c5818348b486a8e204.png?s=120&d=404

像这个地址的默认头像,在 Gravatar 提示找不到。

#14 楼 @huacnlee 我现在也有跟 15 楼一样的问题。你在 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 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; 这样就好了。不知道你是怎么配置的?

需要 登录 后方可回复, 如果你还没有账号请 注册新账号