楼上都是恶搞的。 我来装 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 版本。