两个问题...好多问题吧!
Ruby China 的 Uploader 文件名格式有两种是有原因的!
model.id
作为文件名,这样用户的头像地址会一直固定不变,可以利于 Fragment Caching,同时还有个情况是 Ruby China 用的是 UpYun 存储头像文件,那边的 HTTP Expires 过期时间是 1 星期,在浏览器 HTTP 请求 ETag
检测的过程中能达到缓存更新的目的。你文件名的问题,就是 filename
这个需要覆盖,不然你说我没事写那个函数干嘛?
store_dir
你那么写其实也对的,Ruby China 这么做还是有原因的,因为 UpYun 当个文件夹的文件数量他们是没有限制的,那边不是一个文件夹,而是一个服务(不会有性能问题),但会到传统的磁盘就不能像 Ruby China 这么做了,普通磁盘目录一个文件夹里面的文件超过一定的数量会有性能问题。
另外,你不应该在前面加 uploads
这个应该是 Nginx 上面配置的,写在哪儿 uploads
会存到数据库。
必须使用 php,因为在软件里写死了
就算程序里面写死了提交到 http://xxx.com/xx.php
服务端也是可以用其他方式实现的,你只需要把 URL 路由特别做成 .php 就好了。
你完全没必要用什么缓存、用什么 Redis(在你不懂它们适合的场景的情况下),那些 zip 的文件信息、路径什么的,你完全可以放心的存到数据库,比如 MySQL 里面。
这个能支持 MacBook 的 Retina 显示不?
屏蔽招聘节点就可以了
你说那些 Python 的领域你会搞么?所以别想了,没意义。
好纠结,一个 MacBook Pro Retina 就够了
好复杂的配置文件...
开发环境得需要 config/environments/development.rb 里面启用 perform_caching
才能让 Fragment Caching 启动的。
config/environments/development.rb
config.action_controller.perform_caching = true
其实可以传到优酷的
参见 Ruby China 的 Topic model 的 last_active_mark 字段:https://github.com/ruby-china/ruby-china/blob/be74a05c48150cb2dd8d87df15154e0c1b384706/app/models/topic.rb#L32
下面是 Mongoid 的源代码示例,ActveRecord 自行脑补
class User
field :last_post_at, type: Integer
index :last_post_at
scope :last_actived, -> { order("last_post_at desc") }
def touch_last_active
self.update_attribute(:last_post_at, Time.now.to_i)
end
end
class Post
belongs_to :user
after_create do
self.user.touch_last_active if self.user
end
end
class UsersController
def activities
@users = User.last_actived.limit(50)
end
end
callback 关联的函数,如果返回了 false,保存都是会失败的,这个在 ActiveRecord 里面也是这样的。 所以你应该确保 callback 相关的函数不会返回 false(别忘了 Ruby 默认最后行的值是作为返回值的)
另外今年的 RubyConf 也有讲过这个事情 Better Callbacks in Rails 5
还给 Rails 提交了新的 callback 处理错误的实现:rails/rails#17227
before_save do
return false if foo != bar
end
before_save do
throw :abort if foo != bar
end
第一个没明白你的意思,好绕,说实际场景,为何要那么做
第二个:MySQL 用 TIMESTAMP
作为日期字段的类型, TIMESTAMP
保存的时候,MySQL 会转换成 UTC 来存储:
MySQL converts TIMESTAMP values from the current time zone to UTC for storage, and back from UTC to the current time zone for retrieval. (This does not occur for other types such as DATETIME.)
#53 楼 @jasontang168 得在 Grafana 上面写查询语句
代码可以着色
Mac OS X 下面如果要想在 Termal 里面实现像 TextMate -> mate, Sublime Text -> subl 那样的命令,可以这样:
在 ~/.bash_profile 里面增加
code () {
if [[ $# = 0 ]]
then
open -a "Visual Studio Code"
else
[[ $1 = /* ]] && F="$1" || F="$PWD/${1#./}"
open -a "Visual Studio Code" --args "$F"
fi
}
然后就可以在 Termal 下面执行 code
命令来启动 Visual Studio Code 来打开文件了
比如:
$ cd ruby-china
$ code .
已实际用过了,写 Ruby 还是可以的,其实这也就是算 Editor,不是 IDE
执行字符串的 Ruby 源代码啊