楼上都是恶搞的。 我来装 B 一下,由于受专利和竞业禁止条款限制的缘故,无法贴出来...
nginx 的 log 日志开启到了 info 级别?关掉就可以了。
#17 楼 @yedingding 我在 Linode 上用的是我老婆的信用卡,问过她,说是 1 月份到期,换了新卡,还好不用麻烦去换。
从爆出截图的文件后缀名 cfm,和 irc log 里面提到的 coldfusion 漏洞和配置问题,这个问题看上是真的。另外 irc 提到 Linode 的信用卡信息是加密的,但是 public key 和 private key 放到了一起,所以...
冻结或者销卡,换卡不知道背后的 cvv 会不会换呢
好像每个做 locale 的都会遇到这个问题,我是这样做的,在 user model 添加一个 locale 属性,用户可以在设置界面进行修改,如果为空的话,就读取他的浏览器设置一个默认值,贴代码:
class ApplicationController < ActionController::Base
before_filter :set_locale
private
def set_locale
I18n.locale = cookies[:locale] || setup_locale
end
def setup_locale
if user_signed_in?
current_user.update_attribute(:locale, guess_browser_language) if current_user.locale.blank?
return cookies[:locale] = current_user.locale
else
return cookies[:locale] = guess_browser_language
end
end
def guess_browser_language
request.accept_language.split(/,/).each{|language|
if language =~ /zh-cn/i
return 'zh-cn'
else
return I18n.default_locale
end
} unless request.accept_language.blank?
return I18n.default_locale
end
end
你可以定义一个 I18n 的 exception_handler:
I18n.exception_handler = CustomizeI18nExceptionHandler.new
class CustomizeI18nExceptionHandler
def call(exception, locale, key, options)
if exception.is_a?(MissingTranslation) && locale == I18n.default_locale
return key
end
end
end
不过如果是有比较多的 i18n 内容项目,我建议是将内容放到数据库或者其他存储,方便修改,有很多 i18n 的 backend,比如 redis,activerecord。你复写一下 backend 的 lookup 方法,也可以实现上面的用途,毕竟用 exception_handler 不是正途。
我以前有过类似的测试,是 fork 多线程,在线程里面用 IO.pipe 定义输入输出,最后断言输入输出是配对的。
获取开始和结束时间来查询,就不需要做时区转化,而且用 date 函数无法有效利用数据库索引。
Model.where("created_at >= ? and created_at <= ?", date.beginning_of_day, date.end_of_day)
很久以前的一篇文章: http://quake.iteye.com/blog/1473073 看你的项目具体情况,这些中间件是可以考虑去掉的:
Rack::Cache 整页缓存
Rack::Runtime 记录X-Runtime(方便客户端查看执行时间)
ActionDispatch::RequestId 记录X-Request-Id(方便客户端查看请求具体在集群中的哪台执行)
ActionDispatch::RemoteIp 防止IP伪造(可以在web server上做)
ActionDispatch::Callbacks 设置callback
Rack::ConditionalGet 设置If-None-Match and If-Modified-Since
Rack::ETag 设置ETag
ActionDispatch::BestStandardsSupport 设置X-UA-Compatiblecd(可以在web server上做)
除非你的应用 GC 压力很大,一般无必要调整,特别是 Ruby 1.9.3 打过 GC patch 和 Ruby 2.0,直接用默认的吧。
我们网站就用的这个 gem,没有遇到什么问题,是你 devise 或者 omniauth 哪里配置不正确吧?
用 https://github.com/liluo/omniauth-douban-oauth2 这个 gem,你可能用的是 oauth 那个 douban 老的 gem
arr.sort_by {|a| a == 'mike' ? '' : a}
nib 是个大坑,我们现在都是直接用代码创建各种 view
都是一些弱智或者恶意爬虫,我的做法是 rescue_from ActionView::MissingTemplate,然后强制 redirect 一个 zip bomb http://en.wikipedia.org/wiki/Zip_bomb
实践效果十分有效,对方通常是用一些第 3 方 http 库,会自动 unzip,然后就内存爆掉了 ...
before_filter 接受 if 参数,用 proc 来处理
class ParentController
before_filter :x, if => proc {|controller| controller.filter_names_for_x.include?(action_name) }
def filter_names_for_x
[:A, :B, :C]
end
end
class ChildController
def filter_names_for_x
super << :D
end
end
Time.now.since 1.week
我们是采用 mp4 格式,然后使用 videojs.com,在 ipad 上是直接用 html5 播放,对于不支持 html5 的,会自动转换成 flash,例子:
raspberry pi + 继电器?控制电器么?
基础的方法: http://railscasts.com/episodes/217-multistep-forms
如果项目中这种引导多步骤的表单比较多,推荐这个 gem: https://github.com/schneems/wicked
require 'zlib'
Zlib::crc32("aa::bb::cc::dd::ee::ff")
另外,我在微博上提到过:Rails 的 ActiveRecord 在 3.1 以后,对于 n+1 有更先进的处理,通过 Eager Loading http://t.cn/zYnMxad 会转化成 in 查询,变成 1+1,而且 in 查询可以通过 cache server 的 multiget 方式来批量命中。
fork 了那个 cache,正在看如何改进这个。
robbin 的这篇文章很赞,将 Rails 中各种 cache 的最佳实践都很详细地总结了一次,强烈推荐。
#5 楼 @ShiningRay 淘宝贡献的代码据说会在 MariaDB 10 这个版本发布,目前好像已经发布 GA 版本。