1. 如果面向全球的情况下,如果不统一为 UTC 后续基本玩不转,在新的服务器上面跑都得注意这一些事情
    2. APP 和数据库不统一的话,写代码都得时刻注意到底该用啥时区,这不是很累么
    3. 时区应该只是展示层的事情

    像你这么配置,你很多时候弄不清楚目前究竟是啥时区,究竟应该用什么时区,换个人来维护更容易出错。 还有,你的这个配置在不同区域的服务器上面,由于你采用了 :locale 会使得你的代码行为不一致,这简直就是挖个坑自己跳进去。 万一错了,你还得搞清楚哪些数据错了,然后迁移数据。

    如果统一成了 UTC,你根本就不需要考虑上面那么多问题,只需要考虑用户的输入的时候是什么时区,然后使用

    param_time = Time.zone.parse(params[:time])
    

    然后就没了,ActiveRecord 会自动帮你把时间转换成为配置的时区,ActiveRecord 的时区配置,与数据库一直这点很重要。

    再加上 Rails app 的时区与这两个一致,我认为刚好就对上了 约定优于配置 的理念。

    综上,建议

    1. Rails 的时区不需要配置了,默认就全是 UTC
    2. 数据库的时区也配置为 UTC
    # config.time_zone = 'UTC'
    # config.active_record.default_timezone = :utc
    
  • [上海] 2017.5.21 Elixir Meetup at 2017年05月11日

    啥时候深圳能办一场 👏

  • 强烈建议,应用层,数据库全部走 UTC

    曾经踩过坑,跌得挺惨

  • 真的如果到了阅读这种程度源码的地步,我比较倾向于下下来看

  • 关于 RSpec 测试 at 2017年04月18日

    还没写就考虑哪些不写了?为啥不都试试?

  • 北京面试所感 at 2017年04月17日

    原来你还有这么励志的故事!

  • simple_form 死活不横排 at 2017年04月13日

    wrapper 定义了吗?

    SimpleForm.setup do |config|
      config.wrappers :horizontal_form, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
        b.use :html5
        b.use :placeholder
        b.optional :maxlength
        b.optional :pattern
        b.optional :min_max
        b.optional :readonly
        b.use :label, class: 'col-sm-3 control-label'
    
        b.wrapper tag: 'div', class: 'col-sm-9' do |ba|
          ba.use :input, class: 'form-control'
          ba.use :error, wrap_with: { tag: 'span', class: 'help-block' }
          ba.use :hint,  wrap_with: { tag: 'p', class: 'help-block' }
        end
      end
    end
    

    楼主还是从 form_for 用起吧,步子不要迈得太大!

  • .sprockets-manifest-xxx 后面的 xxx 是随便生成的,不是这个文件内容的 MD5,资源文件的 fingerprint 才是 MD5 的

  • 想改变一点 at 2017年04月01日

    诺,今天不就有篇帖子么:https://ruby-china.org/topics/32679 我已经坚持看论坛每一篇帖子超过 3 年了 😄

  • 期待有后文 😄

  • 我喜欢这个

  • 无法启动 puma at 2017年03月22日

    先检查一下服务器环境吧,我猜是 sshkit 所加载的 bash 环境与你预期的不一样

  • Ruby China 正在衰退吗? at 2017年03月13日

    不知道为啥,入了 Ruby(Rails)后,我对 Nodejs, Golang, Elixir 和前端都感兴趣,分别保持着不同的跟进。 我想可能是因为编程应该是舒服的这个理念影响了我,而这个正是 Ruby(Rails)所带给我的。

  • 小小的個人 ROR 心路歷程 at 2017年03月10日

    然?迎娶白富美,走上人生巅峰了吗?😆 😆 😆 😆

  • 看 ruby-china 源码呀

  • 求推荐机械键盘 at 2017年03月06日

    FILCO 87 键 茶轴

    已为我服务超过三年,没有遇到任何问题

    https://item.jd.com/2391971.html

  • 工程师只是负责实现吗? at 2017年03月02日

    不要给自己贴标签,工程师应该是来帮忙解决问题的,利用技术手段来解决问题。

  • Amzon S3 出大乱子了 at 2017年03月01日

    我觉得分享原因更有价值,而不是这般毫无意义的吐槽。

  • 阿里云木马查杀全纪录 at 2017年03月01日

    我想知道怎么会中招的?

  • 去过,环境挺 nice

  • 👏

    但是这三个没啥吸引力啊!

  • #10 楼 @martin91 其实是我左边的告诉我的,我左边的又是左边告诉他的,哈哈。

  • #7 楼 @martin91 我上周已经用上了,哈哈哈

  • #18 楼 @VincentJiang

    服务器:vim

    开发:vim + sublime text + atom

  • 目前我是参考了 react_on_rails 的模式,用 webpack 来做构建,然后 build 出来的文件放到 app/assets/javascripts 下面,然后 rails 再去引用

    这样既不会影响 assets pipeliine,又能够享受基于 nodejs 所有的构建工具所带来的好处。

  • 👏

  • 反正我认识的 Rubist 的涉猎都非常广泛

  • SQL 里的 where 条件,通常这么写

    select *
    from persons
    where (xxxxx) and (xxx) 
    

    如果有 or,也是这样

    select *
    from persons
    where (aaa or bbb)  and (ccc)
    

    所以,你会发现

    Person.where("persons.name = ? or persons.age = ?", 'Pearl', 24).where("ccc")
    

    Person.where(name: 'Pearl').or(Person.where(age: 24)).where("ccc")
    

    要清晰得多,再说了,你的 or 后面再加个 where 你怎么搞?你的 or 条件究竟是在哪个子句里面?

  • 出 BUG 啦

  • 就那么 100 来行代码,楼主自己研究一下不就行了,看看 clockwork 是怎么实现的。给两点思路:

    1. clockwork 里有一个特定的任务,负责定时从数据库同步最新的任务
    2. 你已经做到了定时任务的结构化,接下来就是如何把数据库里的任务转换成为 clockwork 的任务

    关键代码

    def tick(t=Time.now)
        to_run = @@events.select do |event|
            event.time?(t)
        end
    
        to_run.each do |event|
            log "Triggering #{event}"
            event.run(t)
        end
    
        to_run
    end
    
    def clear!
        @@events = []
        @@handler = nil
    end
    

    另外随手找了网上别人写的例子(我没细看)

    https://gist.github.com/ianneub/6468925