• 这个项目已经算是推倒重来一次了,第一次比较正式的介绍应该来自这篇 http://blog.skylight.io/introducing-helix/ 去年新加坡的红点 RubyConf 上 Godfray 还谈论了这个项目。

    最开始这个项目是在 https://github.com/rustbridge 组织下的(里面还有一个 rust-nodejs 的 bridge 项目,但目前都已被清空了),然后,这个项目在几个月后,就太监了...

    同时在发展的还有一个项目 https://github.com/d-unseductable/ruru 几个月断更之后,刚刚看到作者又在继续开发了。

    再然后就是 usehelix.com 上线,Yehuda Katz 的公司全面接管项目,看上去也有了喜人的进展。

    衷心看好这个项目,如果能够达成路线图的目标,一定会救赎 Ruby 和 Rails,底层通过高性能语言实现,Ruby 作为上层暴露的接口,就像 Python 在 TensorFlow 的作用一样。

  • 这下真伤心了 at 2017年07月08日

    我这不还没入监呢么...

  • 这下真伤心了 at 2017年07月08日

    我要开始怼人了。

    你是 2013-12-22 注册的论坛,可以说,你是社区的早期成员了,今天是 2017 年 7 月 8 日,在近四年的时间里,你有多少进步?是不是总结出了值得分享的心得?是否变成“过来人”可以解答新手的问题了?你现在居然说 我能做的就是把这个问题提出来,你是不是在承认自己四年的时间毫无成长?我觉得也已经体现我的价值了 所以四年后的今天你还就这点价值?

    我为什么要冒天下之大不韪,发如此敏感的话题,惹得广大老鸟们生气呢?

    • 你以为没有人思考 Rails 为什么衰退么? Ruby 和 Ruby on Rails 在 2017 年 还有前途吗?
    • 你以为管理员没有思考论坛为什么不活跃了么? Ruby China 正在衰退吗?
    • 你意识到论坛 不活跃 而你的实际行动是什么? 平常潜水,你就是那个不活跃分子好不好。
    • 你真的只惹到老鸟们生气了么?点开每一个回复你的用户,看看他们的发帖和回复,自己去判断。

    你一边抱怨着论坛不活跃了,一边高谈阔论,你指出的解决方法有根据么?

    • 要求别人活跃帮助他人不计较付出,自己 平常潜水
    • 要求社区成立委员会,明确社区发展导向。这个委员会本身就是公开的 关于 - 社区管理员
    • 完全可以依托论坛成立商业公司,你知道成立公司要做哪些事情么?付出多少精力和金钱?我 @Rei 我俩管理员都曾是创业者, @lgn21st 现在仍在积极创业,我们都对成立公司的程序和操作以及代价有一定了解。你建议成立公司的依据是什么?程序和代价是什么?成本核算?如果社区要成立公司,你会出资支持么?

    我们欢迎意见,但我们(无论是社区也好还是现实中的自然人)希望得到的是“建设性”意见。

    你因为没有人支持你的观点而伤心了,你的不负责言语有没有伤害到别人呢?想过没有?

    不管你喜不喜欢知乎,我都建议你再好好读读 如何看待女权主义者在 Steam 坎巴拉太空计划社区中心发表的这番反歧视言论? 这篇回答。

    1. Linus 批评的是自以为是的人,他批评的问题和指出的那一行都代码质量没关系。我不攻击你原帖的观点,我直译了 Linus 的文字,指出了他的观点,你一不去求证,二你声称英文不好并在我指出你误读了他的文字的前提下仍坚持错误的理解,这就叫自以为是,并且,你不虚心。

    2. 没有,或者你觉得我有,那请你举证。

    3. 开源精神就是“你行你上”,你自己没做过什么事而挺爱指指点点,想必 Linus 的经典言论“Talk is cheap,show me the code”你一定听过。此外,不谈我为中国 Rails 社区的贡献,你学的 Rails 里就有我的代码,我写过的 Gem 应用在很多公司的很多系统里,涉及现金流水数千万,你跟我谈开源精神?对,我这句在装逼。不要去教专业厨师应该怎么做饭,“键盘大厨”讽刺的就是这种人。

    4. 我还有很多人从各种角度讲明了你的观点不妥,我的观点和你的相悖,所以我就是在反对你的观点。你抛出观点,还不能允许别人反对了?

    5. 再重温一遍我引用的来自知乎的那段话

    6. 我的观点是:己所不欲,勿施于人;以身作则;尽力而为

    7. 你反感知乎,而我引用的是某人的文字。难道你认为这句话是他发表在知乎上的,所以他的话对你而言就是被讨厌的?

  • 再次重申,没有喷代码,不信你自己去翻译。

    再次重申,没有喷代码,不信你自己去翻译。

    再次重申,没有喷代码,不信你自己去翻译。

  • 另外我不知道你英语不好,你我完全不相识,而是当我看到你完全误读了 Linus 的话,让我知道你可能英文不是很好。

  • 本来我是不想说啥的,但既然你崇拜 Linus,我就把 Linus 的观点分享给你,并且,我告诉你 Linus 恰好批评你的观点,我不知道你会怎么想。

    如果你说我欺负你英文不好,那你大可亲自去了解清楚我刚发的截图的讨论过程,然后用实证说出来:我欺负你了,我不友善。

    无论怎样,我还是要引用我引用的知乎某个回答的一段话:

    她一方面强迫他人去理解和接受她的"世界“,一方面又关闭了交流的门,想想看她应该把“己所不欲,勿施于人”理解为单方面让别人去适应自己,而并没有尊重别人的想法,反而认为别人如果想法跟她不一样,就是别人的不对。

  • 我就是把截图里的 linus 的回复,直接翻译成中文而已,不信你自己敲到 google translate 里看看

  • 你自己把截图里那段话,放到翻译软件里看看他在批评什么。

  • 何况你这样说是伤害到很多一直热心社区人的心的,我们解答问题,分析知识,封装 gem,现在有个人跳出来,我觉得你们对新手不友好。

    你说一直在做这件事的人什么感受?我们在做这事的时候,你在做什么?你凭什么这么说?

  • 何况 Linus 另一句经典名言了:Talk is cheap, show me the code.

    与其指挥大伙你们应该怎样,不妨身体力行,用自己的行动鼓舞大家加入到你的事业,亲自帮助到一些人,让别人在其他人面前说出:这个人,感谢他。

    你帮助到的人有几个捡起你的衣钵,薪火就传下去了,这是一笔投资。你可以看到,慈善的逻辑,就是这样。

  • 你的英语不太过关,linus 说的跟代码没有关系

  • 他吐槽的是 default m 那一句啊,意思是提交者希望默认启动他的驱动。

    直接翻译 Linus 的话:

    每个开发者都认为他们的代码是特别的、精巧的以致于应该被默认启用。

    但抱有这想法的大多数人都是完全的彻底的错了。

    我想引申一下:

    每个人都觉得自己的想法或者建议是有益的、可行的以致于大家应该听从。

    但抱有这想法的大多数人都是完全的彻底的错了。

  • 然而 linus 大神刚怼了楼主的想法...

  • yarn 可以替代过去把前端的依赖放到 vendor 的作用

  • 支持一下!

  • 一般包含进来,另外包不包含,也要合理的在 Gemfile 里约束好依赖的版本

  • 完全可以理解这种想法。

    在我的立场上,这些年我在编程上有了一点心得,也渴望交流,我愿意帮助新人们成长,加入到我们这些所谓的”老炮“行列中,我想大家认为的”高手“也是这个态度。

    我不知道你会不会有这个想法:我是新人,很多东西不知道,需要高手手把手教教我,这样我进步才会快。

    但是”高手“的想法是:教给你方法,点到为止,你进步才能快。

    首先,冲突就产生了,这帖子里的一些讨论就是例子。

    其次,新手成长的速度也拉开了,看一下知乎那边 叛逆者 回答的一个问题的答案 如何评价空明流转?

    至于语言不友善,这个其实在 提问的智慧 里,有阐述,如果让我总结:

    如果希望别人伸出援手,最好的方法是表现出”我尽力了,但我还是失败了“,文字上说”我找了百度,看了文档“并不有力,而是要通过 "我在做什么 -> 我怎么理解这个问题的 -> 我在哪搜索了哪些关键字 -> 我考察了哪些方案(但不奏效)-> 以上是我所尝试过的,请帮忙看看我是不是漏掉了什么?" 这是解决一个问题你的思考路径的整理,这是你真诚想解决问题顺便帮助他人的证据,这是值得得到一个优秀回答的请帖,这个帖子和讨论会成为其他后人的范本(就是 wiki)。

    至于成立社区管理委员、明确社区发展导向,其实这个东西现在就有,很多老的会员还在坚持参与讨论的人,都承担了这个角色,他们的言行(无论好的坏的),都引导了发展导向。即使我们真的要成立一个委员会,那么,哪些人可以加入呢?他们加入能否服众?这又是个问题。

  • 不加 Gemfile 的话,可以质疑你这个同事关于依赖管理的基本素养了,不夸张。

    为了更好的协同开发,要求同事间的开发环境尽可能的一致这个也是强烈建议项(甚至强烈建议开发环境跟生产环境一致),某些 Gem 会在 Gemfile.lock 里标记一些平台要求的信息,这会在某些情况下,你的同事有混杂使用不同 OS,bundle 失败,所以包不包含 Gemfile.lock 倒是一个没有结论的问题,看需要。

    另外,对于某个 Gem 的卡住安装这种,显然的,这位同事应该自己解决自己的环境问题(写 Rails 项目不想装 Rails 这个怎么讲都说不过去的),但是,实际上 bundler 还真可以做到不安装某些 Gem 的。

    这个功能在我不知道该去哪读那该死的文档呢?

    看一段 Capistrano 的输出:

    00:15 bundler:install
          01 ~/.rvm/bin/rvm default do bundle install --path /home/jasl/sites/lab/shared/bundle --jobs 3 --without development test --deployment --quiet
    

    注意 --without 后边的两个实参是 development test,对应 Rails 的 Gemfile 里的 development 和 test group,所以,你只需要吧 spring 单独放到一个 group 里

    group :spring do
      gem 'spring'
    end
    

    然后

    bundle install --without spring 即可了,这个手法 Redmine 就在用 https://github.com/redmine/redmine/blob/master/Gemfile#L42-L45 用来解决一些对环境有依赖的可选功能,另外他们那边也有讨论(我现搜的) http://www.redmine.org/boards/2/topics/29070

    PS,spring 会 wrap 一些 gem 的 binstub(就是项目目录 bin 下的那些命令),不安装 spring 的话使用某些命令调用会失败。

  • 没权限就给他权限不就行了么。。。

  • 马上,这周有点工作调度,忙得焦头烂额,下周~

  • 这是一个近距离接触大牛的机会,内容其实国内的会议更偏工程,实用性强的。

  • 字符串截取后面 at 2017年07月05日

    不知道...开始没认真读正文。

    我也不太能理解一个可以很直觉的解决的问题为啥要用这么深奥的算法来解决...

  • 字符串截取后面 at 2017年07月05日

    如果你只想判断结尾的扩展名,并且通过字符串操作而不是构造个 File 对象啥的

    [1] pry(main)> "yooo.erl".end_with?(".erl")
    => true
    [2] pry(main)> "yooo.erl".end_with?(".rb")
    => false
    
  • 最后调用下一 to_h 试试

  • 走之前就偶尔充不上电了... 到日本我发现玩 wow 的时候电脑会充电(好奇怪的设定...),然后充电只能靠猛玩 wow... 结果有一天没注意电量,搞到强制关机了... 回天乏术,回北京后苹果店直接给换了主板...

  • Migration 就是迁移的意思,这个机制在很多 web 程序和框架上很常见了。

    一个朴素的 Migration 可以这样做:

    • 为了功能 A,你需要为数据库增加新的表,于是将创建表格的 SQL 保存在 create_table_for_a.sql (文件名我随意取的)中,当 A 上线时,在数据库执行这个脚本
    • 接着功能 B 也要做对数据库做改动,仿照做功能 A 时候的方法,创建了文件 sql_for_b.sql,并且在上线时,在数据库执行
    • 继续同理...故略

    随着项目的迭代,可以得到一组 SQL 文件,需要部署到新的环境的时候,只需要按照文件的顺序,依次执行即可。

    以上就是最原始的做法,你可以在著名的基于 Java 技术的工作流引擎 Activiti 中看到 https://github.com/Activiti/Activiti/tree/master/activiti-engine/src/main/resources/org/activiti/db/upgrade

    Rails 的 Migration 更先进,额外实现了如下特性:

    • 实现了一组 Ruby 的 DSL,意味着你可以通过 Ruby 代码做 SQL 做的事情(主要是创建、修改、删除表和索引),这样使得(通常情况下)迁移脚本和具体数据库软件解耦,对比上文举的 Activiti 的例子,它为每一种它支持的数据库分别实现一遍 Migration SQL
    • 可以调用项目中的模型,更方便的进行数据的更改。
    • 标准化了数据迁移脚本的格式,使得不仅可以正向的迁移,程序发版有问题需要回滚的时候,可以回滚数据迁移
    • 在数据库中增加了额外的迁移记录表,方便追踪迁移的执行,保证迁移不会重复执行,不是全新的数据库时 Rails 可以知道应当从哪条迁移脚本开始继续
    • 约束了迁移脚本的格式(默认格式 时间戳_文件名.rb)解决了数据迁移的先后顺序问题
    • 自动生成当前版本数据库表结构的快照(即“schema.rb"),于是可以实现快速部署到全新环境的数据库而无需依次执行迁移脚本,对比上文举的 Activiti 的例子,他(为每种它支持的数据库)单独提供一份最新版本的数据库的 SQL 用作全新环境的安装
    • 提供了便捷的 rake task 去执行迁移、回滚、复位、创建、删除等迁移操作
  • 你发的应该过时了,那篇文章的发布时间是 09 年,文中的命令行还是 Rails 2 的风格,现在几个在维护的 Redmine 版本在使用 Rails 4.2