• 在 Linux 上用locale命令检查一下系统编码:

     > locale
    LANG=en_US.UTF-8
    LANGUAGE=
    LC_CTYPE=en_US.UTF-8
    LC_NUMERIC="en_US.UTF-8"
    LC_TIME="en_US.UTF-8"
    LC_COLLATE="en_US.UTF-8"
    LC_MONETARY="en_US.UTF-8"
    LC_MESSAGES="en_US.UTF-8"
    LC_PAPER="en_US.UTF-8"
    LC_NAME="en_US.UTF-8"
    LC_ADDRESS="en_US.UTF-8"
    LC_TELEPHONE="en_US.UTF-8"
    LC_MEASUREMENT="en_US.UTF-8"
    LC_IDENTIFICATION="en_US.UTF-8"
    LC_ALL=
    

    很可能系统编码不是 UTF-8,设置一下应该就好了。

  • has_many是一个类方法。你调用这个方法的时候,它定义了一系列新方法来实现其功能。简单的说,这个方法类似于这样:

    class ActiveRecord::Base
      def has_many(name, options = {})
        define_method name do
           # return the association
           ...
         end
       end
    end
    

    因此,你以相同的名字两次调用has_many时,第二次调用时定义的方法就把之前定义的方法覆盖掉了。 也许你只能用不同的名字,比如:

    class User < ActiveRecord::Base
      has_many :user_appointments
      has_many :store_appointments, foreign_key: 'store_id'
    end
    
  • 用 helper 消灭多行代码。

  • 不会是运行在 development mode 吧?

  • 对于返回 10 的斐波那契数这样的请求,golang 的实现能处理 3 万~5 万次请求/秒,而 sinatra 的实现则只能处理 600 多次请求/秒。差距真是不小呀。详见 Node Express vs Python Flask vs Go vs Sparkjava vs Ruby Sinatra.

  • 好像只要你在源代码里改动一个字符,Nanobox 都要重新 build container, 恐怕很多人没耐心等着这个。在开发环境中使用 Docker,我觉得还是直接 mount 一个 folder 比较好。

    我在开发环境中用 Docker 有一段时间了,感觉最大的好处就是能够更快的搭建开发环境,比如,pull 一个 MySQL 的 image,往往比安装配置 MySQL 更快,就是你有 Chef 之类的工具安装配置 MySQL。

  • 关于《Programming Ruby》 at 2015年11月12日

    1.8 到 1.9 有很大的变化,有些改动导致代码不兼容,而且 1.8.6 都已经不再维护了。1.9 到 2.0 就没有兼容性问题了,只是不断增加新功能而已。 还是硬着头皮读英文吧。读一本书,同时学两种语言,不是也挺好的么。

  • 应该是写在 database.yml 中的:

    development:
      adapter: mysql
      encoding: unicode
      ...
    
  • 不知道这个是不是有关:

    config.active_support.time_precision sets the precision of JSON encoded time values. Defaults to 3.