Skip to content

Latest commit

 

History

History
278 lines (157 loc) · 9 KB

2017.md

File metadata and controls

278 lines (157 loc) · 9 KB

2017/02

request对象*

grape中使用request.body.string,本地没问题,staging服务器使用passenger报错,request.body对象在不同服务器下不同

https://groups.google.com/forum/#!topic/phusion-passenger/EYbAUYoh5qE

ransack

search_field中包含integer_column: activerecord-hackery/ransack#85

sidekiq

sidekiq并发与数据库总连接数

http://stackoverflow.com/questions/25968728/sidekiq-could-not-obtain-a-database-connection-within-5-000-seconds

https://github.com/mperham/sidekiq/wiki/Advanced-Options#concurrency

Rails constant load

namespace与class同名时,class的const_missing会返回已定义的对象。

warning: toplevel constant ApplicationController referenced by SuperAdmin::ApplicationController

参考 http://stackoverflow.com/questions/3175591/rails3-warning-toplevel-constant-applicationcontroller-referenced-by

http://stackoverflow.com/questions/10902023/rails-3-2-3-namespaced-controllers-being-overridden-by-global-controllers-with-s/10902980#10902980

https://groups.google.com/forum/#!topic/rubyonrails-core/urXofuENLss

ActiveRecord code style

Placing your callbacks after associations is usually a good practice.

http://api.rubyonrails.org/classes/ActiveRecord/AutosaveAssociation.html

has_many :through

rails/rails#8828

2017/03/28

inverse_of

总结

  1. inverse_of用于在has_many,has_one,belongs_to中自动引用关联对象,即已实例化关联对象,在某些情况下使用关联对象不会再去查找数据库,而是直接使用已实例化的对象。主要用于减少查询。
  2. 使用has_many through情况下,若不设置inverse_of,会出现中间表对象没有引用关联对象的情况,有可能导致中间表记录不创建的情况。
  3. rails4.2下,has_many through为中间表添加inverse_of发现行为比较奇怪,要根据源码分析,猜测不出实现。

由于rails4.1+会自动添加inverse_of,上述1,2点仅在小于4.1版本出现,不过对于某些情况是不会自动添加inverse_of的。关于inverse_of的限制(不支持某些设置或关联类型),参考官方文档

参考

https://ruby-china.org/topics/24998 https://www.viget.com/articles/exploring-the-inverse-of-option-on-rails-model-associations

2017/03/29

Rspec中添加helper方法

http://www.rubydoc.info/github/rspec/rspec-core/RSpec/Core/Configuration#include-instance_method

http://stackoverflow.com/questions/20955384/how-to-reuse-a-context-in-rspec

注意点

  • 在配置rails_helper.rbinclude可以通过type选项指定类型加载。
  • 要首先加载文件,如定义在spec/support下则需要对该目录下文件进行require

Rspec中的复用

复用测试用例,使用shared examples https://www.relishapp.com/rspec/rspec-core/v/3-5/docs/example-groups/shared-examples

复用方法或数据定义等(非完整测试),使用shared context https://www.relishapp.com/rspec/rspec-core/docs/example-groups/shared-context

2017/03/30

Rails中的ActiveRecord存在性检查优化

只用于检查DB中对象是否存在时,通常使用exist?会有最佳性能

User.exist?

https://semaphoreci.com/blog/2017/03/14/faster-rails-how-to-check-if-a-record-exists.html

2017/04/01

杂谈

闲逛看到的The Twelve-Factor App

构建saas应用的注意要点,感觉基本适用于大部分应用。 可理解为如何提高项目的可维护性

2017/04/10

web服务器与web应用的模型

Phusion Passenger Design and Architecture

(总结待补充..)

2017/04/11

深入ActiveRecord

[20,000 Leagues Under ActiveRecord]http://patshaughnessy.net/2014/9/17/20000-leagues-under-activerecord

要点总结

  • ActiveRecord中的QueryMethods一般会返回ActiveRecord::Relation对象,同时将query的参数存储在对象里,而不会马上执行查询。
  • 当调用FinderMethods时,ActiveRecord::Relation对象才会按缓存下来的条件真正执行查询。
  • ​ActiveRecord使用arel(一个ruby的AST实现)做sql语句转换

2017/04/14

从零开始理解为什么js需要打包..

首先理解js的执行环境

Javascript诞生记 JavaScript 运行机制详解:再谈Event Loop Javascript在网页页面加载时的执行顺序

大概就是开发者遇到了js无法模块化导致命名空间混乱,影响加载速度等各种问题....

于是出现了各种打包工具

http://www.ruanyifeng.com/blog/2014/09/package-management.html

打包工具基本是基于这几个种规范的实现

2017/05/05

服务端与客户端token认证的思考

使用token确保客户端用户的身份,从两个方面考虑:

  1. token的签发与维护策略
  2. token传输过程的安全性

我认为token传输安全性可以通过协议(如https)确保,而token的策略则是在token泄漏的情况下(在token传输100%安全的情况下这应该是没有意义的,但似乎不可能),如何把危险性降到最低。

参考链接:

http://stackoverflow.com/questions/7030694/why-do-access-tokens-expire

https://auth0.com/blog/ten-things-you-should-know-about-tokens-and-cookies/

2017/05/17

rails中拆分services的实践方式

https://ruby-china.org/topics/23892 http://brewhouse.io/blog/2014/04/30/gourmet-service-objects.html https://www.netguru.co/blog/service-objects-in-rails-will-help

2017/06/12

权限层设计考虑

https://softwareengineering.stackexchange.com/questions/262424/where-does-authorization-fit-in-a-layered-architecture varvet/pundit#212

可以考虑将权限验证放在service层

2017/06/13

拆分Rails项目

暂不考虑微服务

https://medium.com/@andriytyurnikov/dissecting-rails-monolith-basics-cc0734934b21 https://apotonick.wordpress.com/2015/09/05/the-only-alternative-to-a-rails-monolith-are-micro-services-bullshit/ https://content.pivotal.io/blog/leave-your-migrations-in-your-rails-engines https://www.embbnux.com/2016/03/15/rails_system_refactor_with_rails_engine/ https://ruby-china.org/topics/28538

2017/06/15

ActiveSupport::Concern#class_methods

定义给include该module的类添加的class_methods

参考源码: https://github.com/rails/rails/blob/master/activesupport/lib/active_support/concern.rb#L134 https://github.com/rails/rails/blob/master/activesupport/lib/active_support/concern.rb#L111

执行class_methods时先定义一个module然后对module进行module_eval 被include的时候基类就会extend这个module

2017/06/21

Rails中的分层设计

https://gist.github.com/vsavkin/3577292

2017/06/29

Rails中混合使用polymorhpic与STI

记录多态类的type必须用STI的基类

https://stackoverflow.com/questions/9628610/why-polymorphic-association-doesnt-work-for-sti-if-type-column-of-the-polymorph

2017/07/11

js浮点数运算的坑

http://blog.gejiawen.com/2015/08/11/javascript-float-count-precision/

2017/07/26

ruby-grape

grape在设计上无法重复mount某个API

ruby-grape/grape#570

2017/07/29

循环构建数组

https://stackoverflow.com/questions/41518896/why-array-new-is-better-than-times-map-in-rubocop

2017/08/07

grape中无法对表单类型自定义解析

grape可以自定义Content-Type的parser:https://github.com/ruby-grape/grape#api-data-formats

参考源码,假如由rack识别为表单类型,则直接跳过parser

2017/08/21

Mysql修改utf8字符集至utf8mb4

https://mathiasbynens.be/notes/mysql-utf8mb4 http://mumaren.me/blog/2013/11/27/support-emoji-in-rails-3-dot-2-14/ https://railsmachine.com/articles/2017/05/19/converting-a-rails-database-to-utf8mb4.html https://dev.mysql.com/doc/refman/5.5/en/charset-unicode-conversion.html http://qiita.com/xend/items/4d5c3333cbae53888f37

两种方案:

  1. varchar(255)改为varchar(191)使索引长度在mysql限制的767bytes内
  2. 修改数据文件类型使索引长度上限变为3072bytes

2017/09/04

Grape在多版本API中的custom middleware会被执行两次(在非目标版本也会被执行)

https://groups.google.com/forum/embed/#!topic/ruby-grape/-knyB5M6xg4

ruby-grape/grape#1466

2017/09/19

Rails中使用to_json方法

https://github.com/rails/rails/blob/master/activesupport/lib/active_support/core_ext/object/json.rb#L35

ActiveSupport重写了Object#to_json,有更多字符会被转义。如:

{ a: 'test&' }.to_json #=> "{\"a\":\"test\\u0026\"}"
JSON.dump({ a: 'test&' }) #=> "{\"a\":\"test&\"}"