RubyChina 是一个优秀的论坛,在中文 ruby 圈中有很大的影响力,许多 ruby 开发者都会学习他的代码,不过 RubyChina 已经是一个很复杂的系统,前后端有很多的模块,学习和部署使用都比较复杂,依赖的 mongoDB 和 ElasticSearch,都需要比较大的内存。
Goodbye MongoDB, Hello PostgreSQL mongoDB 是 Schemaless 的,很多实践显示 Schemaless 并没有那么好,使用 Schemaless 的存储,引入了隐形 schema 的问题。这些隐形的 schema 不是有存储引擎定义的,而是有应用程序定义的。像 mongoid 是在 model 中定义 schema,但是如果这样做,为什么不在数据库中定义呢?
在数据库中定义 schema 有一个好处,即重用性 (resuability),如果有多个应用要访问数据库,使用 Schemaless 将会造成混乱。
我做了一个基于 postgreSQL 的移植 https://github.com/rivid/ruby-china/tree/postgresql ,
存储和搜索都基于 PostgreSQL,使用熟悉的 ActiveRecord 减少了系统的复杂性,更易于维护。
spec 大部分已经测试通过,剩下 4 个没有通过,好像不影响实际使用。
1) TopicsHelper markdown should right with Chinese neer URL
Failure/Error:
expect(helper.markdown('此版本并非线上的http://yavaeye.com的源码.')).to eq(
'<p>此版本并非线上的<a href="http://yavaeye.com" rel="nofollow" target="_blank">http://yavaeye.com</a>的源码.</p>'
)
expected: "<p>此版本并非线上的<a href=\"http://yavaeye.com\" rel=\"nofollow\" target=\"_blank\">http://yavaeye.com</a>的源码.</p>"
got: "<p>此版本并非线上的http://yavaeye.com的源码.</p>"
(compared using ==)
# ./spec/helpers/topics_helper_spec.rb:8:in `block (3 levels) in <top (required)>'
2) sign up and login fail to sign up new user if password field is empty
Failure/Error: expect(page).to have_content('密码不能为空字符')
expected to find text "密码不能为空字符" in "Ruby China 社区Wiki招聘推文酷站 注册 登录 注册新用户 × 有 2 处问题导致无法提交: Password不能为空字符 Password confirmation与确认值不匹配 公开 Email / 登录"
# ./spec/features/signup_login_spec.rb:39:in `block (2 levels) in <top (required)>'
3) sign up and login let user sign up and login to the site
Failure/Error: expect(page).to have_content('社区精华帖')
expected to find text "社区精华帖" in "Ruby China 社区Wiki招聘推文酷站 注册 登录 x没有该用户,请您重新注册。 登录 记住登录状态 注册 忘记了密码? 用其他平台的帐号登录 GitHub"
# ./spec/features/signup_login_spec.rb:28:in `block (2 levels) in <top (required)>'
4) OAuth2 password get_token should work
Failure/Error: @access_token = client.password.get_token(user.email, password)
OAuth2::Error:
invalid_grant: 授权方式无效,或者登录回调地址无效、过期或已被撤销
{"error":"invalid_grant","error_description":"授权方式无效,或者登录回调地址无效、过期或已被撤销"}
# ./spec/requests/oauth2_spec.rb:38:in `block (4 levels) in <top (required)>'
# ./spec/requests/oauth2_spec.rb:37:in `block (3 levels) in <top (required)>'
https://github.com/rivid/ruby-china/tree/postgresql
欢迎使用