#16 楼 @yukihiro_matz Go 不需要包管理,自带的 go get
命令能自动检测到代码里面依赖的三方库,自动下载,编译
演示地址: http://115.29.238.54/
顺便贴了个图
功能还差得远
mini_magick
用来做什么?
文件的问题,交给 Nginx 处理
面试都是先电话聊的
因为 Ruby China 的代码是给 Ruby China 用的,后面的一些功能直接写死的
调用一下就知道了,再说,一般文档都有写的
好多年没用过了,早该关了
已经根据你的需求实现了,请用 0.7.0 版本
gem 'mongoid_auto_increment_id', '0.7.0'
然后配置
# cache_store 建议放在 MemoryStore 里面,避免其他缓存区域的 Write Lock
# 但 MemoryStore 带来的问题是进程之间无法共享,最终会导致 ID 不再是有序的了,无法用于排序
# 另外, 重启进程 Cache 丢了没关系,实现是先在 MongoDB 里面把一定的长度占用了,再缓存的,也就是丢弃了一批编号而已
Mongoid::AutoIncrementId.cache_store = ActiveSupport::Cache::MemoryStore.new
Mongoid::AutoIncrementId.seq_cache_size = 500
mongoid_auto_increment_id 是根据 MongoDB 官方的这篇文章来实现的《Create an Auto-Incrementing Sequence Field》,起初的设计目的是为了要一个简洁的主键,便于应用到 URL 里面,使 URL 更加简洁、优雅
其实类似的做法,在我们公司的 MySQL 也有,由于数据量大,我们需要将大量数据划分在多个库,多个表里面,由此带来的问题是 MySQL 的自增编号就无法使用了。
类似的自行维护的方案就不得不用起来
你需要多大的吞度量?
其实有很简单方法来减少自增表的 Write 动作,提高吞吐量的,就是让 generate_id
改成支持批量生成,一次生成 100 - 1000 个,根据实际需求调整,放在内存里面,后面的调用都是内存里面 Array 的 shift 动作,用完了再调用数据库,重新占用一批
也可以配合 Rails.cache 用来存储生产出来的 ID 以便多进程、多机器之间共享
类似的问题还在 find_or_create_by
Please note this method is not atomic, it runs first a SELECT, and if there are no results an INSERT is attempted. If there are other threads or processes there is a race condition between both calls and it could be the case that you end up with two similar records.
http://api.rubyonrails.org/classes/ActiveRecord/Relation.html#method-i-find_or_create_by
Using this validation method in conjunction with ActiveRecord::Validations#save does not guarantee the absence of duplicate record insertions, because uniqueness checks on the application level are inherently prone to race conditions.
应该要数据库增加唯一索引,光靠 ActiveRecord 的 validation 在并发出现的时候,会不靠谱的
了解 Ruby App Server 的机制,可以看《Unicorn Unix Magic Tricks》简单易懂
middleware delete 就好了
那是你自己访问不了
sudo yum install -y patch libyaml-devel autoconf patch readline-devel libffi-devel openssl-devel automake libtool bison sqlite-devel
手动调用这个试试
Rails 不用设置编码的 只需要 MySQL 修改好就行了
用 Linux 跑一下先,避免遇到 Windows 的问题