• 少了 @lgn21st 的号召,大家热情不是很高啊! 我想参加这次的活动,和大家一起探讨一下 Ruby / Rails 并发模型,特别是 Ruby on Rails 线程安全代码问题, 见我的一个帖子,http://ruby-china.org/topics/10932 , 不知道大家是否感兴趣。

  • 咋一看以为是 Sublime Text,开心了几秒钟,哈。

  • 下载了,很棒!谢谢 @flyerhzm

  • 说明 Zed Shaw 的代码很经典,孵育了多个很棒的应用服务器,他离开 Ruby 届真是一大损失。

  • 为 API 生,为框架死,为 Debug 奋斗一辈子!吃符号的亏,上大小写的当,最后死在需求上!洒脱的杯具程序员,苦逼的程序人生!

  • #1 楼 @wushexu 大部分情况下,idea 都不是最重要的,执行力是最重要的。 就算全职全力以赴,都不一定能保证好的执行力,何况兼职呢? 所以别想着兼职创业了,风险和回报总是匹配的,哪有风险又低,回报又很高的事情啊!

  • RubyConfChina 2013 计划 at 2013年04月21日

    我可以贡献些力量,至少我的公司非常愿意赞助大会,哈!

  • RubyConfChina 2013 计划 at 2013年04月21日

    Ruby 社区大多是非常热情,非常 nice 的人,相信大家一定能这中国 Ruby 的盛会传承下去的。我觉得首要的问题是要找到并确定筹办的负责人,然后由他和你一起成立一个筹办小组。

  • RubyConfChina 2013 计划 at 2013年04月21日

    @lgn21st 辛苦了,因为你的努力,这四届的 RubyConfChina 大会才能顺利举办,而且一届比一届精彩。

  • Ruby 程序员的收入随工作经验的增长成下降趋势。是不是因为很多有经验的 Ruby 程序员喜欢加盟创业公司或者自己创业,拉低了平均薪资。创业是高风险的,也是可能高回报的,这点不能在薪资中直接体现。

  • RVM,遇到过一些麻烦都解决了,已经习惯了,所以除非新的工具有本质的改进,否则不想换新的。

  • 唉,果断把信用卡挂失停掉了。

  • Ruby China iPhone App 上架了 at 2013年04月12日

    @dave 做的不错,我使用下来感觉挺好的,比手机 Web 版方便,速度很快,谢谢楼主,哈! 不过界面美观还有待加强,不知道 @dave 还打算继续改进否?或许我也可以贡献些代码,呵呵

  • Ruby 的常量查找路径问题 at 2013年04月12日

    #10 楼 @simonykq 两种定义方法 method 的查找路径有些差异,但是性能应该不会有多少差别。

  • #36 楼 @simonykq 你再运行一句,肯定抛异常

    Place.column_names << 'owner'
    Place.first
    
  • Place.column_names << "owner" 将会更改 Place.column_names的值,这会把整个 column 定义搞乱掉,所以你把上面说的代码改掉,应该就 OK 了。

  • 这句代码有问题

    (Place.column_names << "owner").include?(params[:sort]) ? params[:sort] : "name"
    

    不能去改 Place.column_names 的值 你可以改成

    array = Place.column_names + ["owner"]
    array.include?(params[:sort]) ? params[:sort] : "name"
    
  • Place 这个 model 的 column 有哪些?最好也说明一下

  • 你能否把完整的异常堆栈打处理看看?

  • 我的也是在 Fremont,现在还没法升级,郁闷。

  • return 是方法(或叫函数)返回语句,如果在 action 里出现,意味着退出该 action 执行,返回上层。 redirect_to 一个方法调用,用于设置 response 为重定向到某个 url,redirect_to 之后并不会中断 action 中的代码,如果需要退出 action,可以在 redirect_to 之后 再 return。

  • 都来聊聊人生污点吧 at 2013年01月06日

    在生产环境主服务器上,以为是测试服务器,输入 sudo shutdown,结果公司所有的客服电话暴掉了~~~

  • 这本书确实不错,值得一看,能让你透彻理解 Ruby 一些核心的基本概念。

  • Ruby 的常量查找路径问题 at 2012年12月07日

    #7 楼 @sevk

    有必要用 class << self 的写法,因为可以限制类方法的可见范围,比如

    class C1
      class << self
         def method3
           ...
         end
    
         private
    
         def method4
           ...
         end
      end
    end
    
    C1.method4
    >> NoMethodError: private method `method4' called for C1:Class
    
  • Ruby 的常量查找路径问题 at 2012年12月07日

    最近看到一篇文章,总算把这个问题弄得比较清楚了,见 http://cirw.in/blog/constant-lookup 常量的查找有两条路径,分别是: A. Module.nesting B. open class/module 的 ancestors A 比 B 优先,A 找不到了才到 B 中查找。 method1 中 A 是 [C1] B 是 [C1, M1, Object, Kernel, BasicObject] CK 在 A 可以找到,CT 在 B 可以找到。

    method2 中 A 是 [C1] B 是 [Class, Module, Object, Kernel, BasicObject] CK 在 A 可以找到,CT 在 A 和 B 都找不到。

    对于

    module M1
      def self.included(base)
        base.extend(self)
      end
      CT = "ok"
    end
    

    可运行,是因为这时,在 method2 中,B 变成了 [M1, Class, Module, Object, Kernel, BasicObject]

  • 感谢 Taobao 提供资源!感谢 huacnlee!以前 RVM 下载 Ruby 和 Rubygems 很慢,常常中途中断,以后应该不会有这个问题了,哈!

  • 代码很清晰,可读性好,适合学习 Sinatra, Backbone。 缺点没有测试代码。

  • #5 楼 @lionzixuanyuan 不客气,这种涉及并发很难在测试模拟的,但是你可以打开 2 个控制台进程,按上面说的操作顺序模拟数据操作,就可以看到实际结果了。

    假设 id 为 1 的 user 初始值是 name: 'lionzixuanyuan', age: 24,根据 代码前的序号执行代码。 控制台 1

    1 user = User.find(1)
    3 user.update_attributes( name: 'lion', age: 24)
    5 user.reload 
    7 pp user
    

    控制台 2

    2 user = User.find(1)
    4 user.update_attributes( name: 'lionzixuanyuan', age: 30)
    6 user.reload 
    8 pp user
    

    结果是

    name: 'lion', age: 30
    
  • #3 楼 @lionzixuanyuan 你用 Windows 部署就比较蛋疼了,Unicorn 和 Passenger 明显被排除了,Thin 还可以考虑考虑,不过强烈建议你换到 Unix 系系统。

    如果不加任何锁处理,通常以最后一次保存为准,但是某些并发情况下会出现“姓名:lion 性别:男 年龄:30”这种状况。

    请求处理的顺序是

    1. 从数据库加载用户对象到 user
    2. user.update_attributes( params[:user] ) params[:user] 是修改的内容,update_attributes 根据 user 数据和 params[:user] 数据生成 update 语句,如果数据未变化,不会出现在 update sql 的 set 里面。

    如果请求同时被两个进程接收处理,他们可能同时进入第 1 步,这时候用户 1 更新的 update sql 只带 set 姓名,用户 2 的更新 update sql 只带 set 年龄,就导致了两个数据部分更新的情况。

  • 同时提交信息,保存信息以最后一个保存为准。如果要严格避免数据保存冲突,有两种方法,需要程序自己做处理,具体见 API http://api.rubyonrails.org/classes/ActiveRecord/Locking/Optimistic.htmlhttp://api.rubyonrails.org/classes/ActiveRecord/Locking/Pessimistic.html

    另外,不推荐使用 Nginx + Mongrel 这种组合部署,因为 Mongrel 已经不再更新。建议使用 Nginx + Unicorn, Nginx + thin 或 Nginx + Passenger。