• Posts tagged "rails"

Blog Archives

Let Two Rails apps to share the same Redis data

Let Two Rails apps to share the same Redis data

Question?

我有两个rails项目,因为项目需要需要共享redis,共享数据,但是遇见的问题是一个项目中可以读写,但是读写的数据另外一个项目中无法共享。

Solve

查看Gemfile -> 发现我的项目中使用了redis, fakeredis, 正是因为fakeredis导致develop工作正常,而数据无法共享。因为fakeredis就是一个虚拟的redis

Solution

使用redis服务

卓有成效的程序员 读书笔记

卓有成效的程序员 读书笔记

第二章:加速法则

1.mac使用spotlight进行快速查找
2. 优秀的IDE快捷键
总之:使用各种工具或者快捷点或者技巧提升开发效率

第三章:专注法则

1: 关掉不需要的提示,邮件,qq等
2:Spotlight找到一个文件后,回车键打开,apple+回车 打开目录
3:用虚拟桌面拆分工作空间 ,从而划分工作区间
排除干扰
隔离策略
关掉不需要的提示
创造安静的时间
搜索优于导航
使用多屏显示器
(更多…)

rails remove test::unit

why?

because we use rspec as our test framework

how?

vim config/application.rb

Object doesn’t support #inspect protected_attributes

protected_attributes问题

问题

将rails3 -> rails4 遇见这样的问题:

查看源码得知:protected_attributes 1.0.3 版本 将ActiveRecord::Base 的initialize方式给重载了

https://github.com/rails/protected_attributes/commit/22e1953ae68850bafbb0c5939b45922d89907d67

解决

升级protectedattributes, protectedattributes的1.0.5已经解决了这个bug了

rails3 升级到rails4所遇到的问题

rails3 升级到rails4所遇到的问题

ruby -> 1.9.3 => 2.0.0

升级ruby版本, 将1.9.3 升级到2.0.0 , 一般本地开发使用的是rvm或者rbenv

protected_attributes

routes

因为rails4中路由中需要明确get or post, 去除了match路由

需要改成:

change gems

modify scope

rails4 中推荐使用 scope :abc, -> { where name: ’111′} 的形式来写

should be

FAQ

解决:

rails 切换数据库链接

# rails 切换数据库链接
## 环境
ruby 2.0
rails 4
activerecord 4.0
## 前沿
最近有个项目,需要在同一个rails项目中使用不同的数据库,看了一下activerecord源码,发现实现是这样的

####lib/active_record/connection_handling.rb

我们可以在我们项目使用:来切换数据库

[deprecated] I18n.enforce_available_locales will default to true in the future. If you really want to skip validation of your locale you can set I18n.enforce_available_locales = false to avoid this message.

rails4: console display deprecated

In order to silence the warning edit the application.rb file and include the following line inside the Rails::Application body

config.i18n.enforce_available_locales = true

Note:

The old default behavior corresponds to false, not true.
If you are setting the config.i18n.default_locale configuration or other i18n settings, make sure to do it after setting the config.i18n.enforce_available_locales setting.
If your use third party gems that include I18n features, setting the variable through may not have effect. In this case, set it directly to I18n using I18n.config.enforce_available_locales.
Caveats

http://stackoverflow.com/questions/20361428/rails-i18n-validation-deprecation-warning

carrierwave和min_magick的使用

carrierwave和mini_magick的使用

安装

安装imagemagick

安装gem包

ruby相关源码

代码片段

相关源码:

  1. manipulate! 方法:

  1. combine_options 方法:

相关知识点

  1. mini_magick 实现原理 调用系统的convert,identify,mogrify等命令处理图片。先把图片写入到临时文件,然后再操作,再保存。
  2. 如何查看mini_magick 执行的命令?

ruby-1.9.3-p194/gems/mini_magick-3.4/lib/mini_magick.rb

  1. mini_magick防止注入 调用系统命令时,要注意防止注入。在mini_magick里是使用了shellescape。 比如:

    解决可参考

    http://ruby-china.org/topics/12435

    http://hooopo.writings.io/articles/1-Shell-Out-Best-Practice-In-Ruby

  2. 脱离carrierwave, 独立使用 mini_magick

比如想得到deal.image 图片的高度和宽度。先使用 tempfile 创建临时文件,然后把图片从gridfs读出来写入该临时文件。然后用 MiniMagick 调用系统命令(这里是 identify).

https://github.com/minimagick/minimagick minimagick使用

sass scss less bootstrap compass

sass scss less bootstrap compass

名词解释

  1. CSS预处器:CSS预处理器用一种专门的编程语言,进行Web页面样式设计,然后再编译成正常的CSS文件,以供项目使用
  2. Sass:Sass是对CSS(层叠样式表)的语法的一种扩充,是最早最成熟的一款css预处理器。可以使用变量函数等功能,能更加有效更弹性的书写css。
  3. Scss:sass的另外一套语法规则,从sass3.0开始,使用新的语法规则
  4. Less:less是一种动态样式语言。
  5. Bootstrap是一个用于前端开发的开源工具包。
  6. Compass是一个sass的Framework。简单来说就是将sass中的很多样式,compass都已经帮忙写好了, 再加入了一些常用的功能,并且简化了写法,极大了提高了开发效率。

sass

语法看demo

使用: 监控sass并生成css文件

sass –watch –style expanded style.scss:style.css

压缩生成:

sass –watch –style compressed style.scss:style.css

官方文档: http://sass-lang.com/

预定义函数:http://sass-lang.com/docs/yardoc/_index.html

compass

compass就是sass中的rails,语法同sass。

使用:

编译生产环境的文件:

compass compile –output-style compressed

自动编译:

compass watch

compass 的模块:

reset css3 layout typography utilities

compass sprite

参考: http://compass-style.org/help/tutorials/spriting/

参考: http://compass-style.org/help/tutorials/production-css/

less

语法和sass基本类似。具体可以看less官方文档。bootstrap就是用less写的。

less中文文档:http://www.lesscss.net/article/home.html

less官方文档:http://lesscss.org/

bootstrap git库:

git clone https://github.com/twbs/bootstrap.git

bootstrap

看demo

列了一些比较常用的用法。

QQ应用开发

QQ应用开发

QQ应用开发背景

  1. 更好的推广品牌
  2. 利用腾讯海量用户,从而迅速积聚用户量
  3. 其他

QQ应用演示

我们公司有两个QQ应用

一个的调取地址是:http://qq.app.tao800.com/ 老版

另外一个是:http://qq.app.zhe800.com/qq_tao 新版

QQ空间应用开发具体步骤

  1. 申请成为QQ开放平台开发者

    链接:http://wiki.open.qq.com/wiki/%E6%B3%A8%E5%86%8C%E6%88%90%E4%B8%BA%E5%BC%80%E5%8F%91%E8%80%85

  2. 创建应用 注:应用部署,腾讯托管和非腾讯托管 链接:http://wiki.open.qq.com/wiki/%E5%BA%94%E7%94%A8%E6%8E%A5%E5%85%A5%E6%96%B0%E6%89%8B%E6%8C%87%E5%BC%95
  3. 应用调试
  4. 申请上线

QQ应用开发注意事项

  1. 注: 填写平台信息中填入应用开发地址:http://demo.com
  2. 在本地绑定 127.0.0.1 demo.com
  3. 点击调试即可

注1:

因为QQ应用是将我们的项目以iframe的形式嵌入到页面中的,故需要在rails4项目中(rails3不用),加入配置:config.action_dispatch.default_headers = {‘X-Frame-Options’ => ‘ALLOWALL’}

注2:

调用API需要appid, appkey

调用API测试环境: 119.147.19.43 生产环境:openapi.tencentyun.com

注3:

QQ应用中的信任IP,这里需要填你服务器的IP,注意,这个IP只能加不能删,所以需要注意一下。

如果不填写信任IP,那么你的应用服务就不能获取到数据

api接口调用

QQ开放平台在调用应用时,跳到应用首页时url会带上参数:openid,openkey,pf,pfkey

我们在调用应用API时都需要openid,openkey,pf这三个参数,且需要用这三者和其他参数生成签名后调用。

需要生成签名:http://wiki.open.qq.com/wiki/%E8%85%BE%E8%AE%AF%E5%BC%80%E6%94%BE%E5%B9%B3%E5%8F%B0%E7%AC%AC%E4%B8%89%E6%96%B9%E5%BA%94%E7%94%A8%E7%AD%BE%E5%90%8D%E5%8F%82%E6%95%B0sig%E7%9A%84%E8%AF%B4%E6%98%8E

签名使用了HMAC-SHA1加密算法

HMAC_SHA1(Hashed Message Authentication Code, Secure Hash Algorithm)是一种安全的基于加密hash函数和共享密钥的消息认证协议。它可以有效地防止数据在传输过程中被截获和篡改,维护了数据的完整性、可靠性和安全性。

HMAC_SHA1消息认证机制的成功在于一个加密的hash函数、一个加密的随机密钥和一个安全的密钥交换机制。

HMAC_SHA1 其实还是一种散列算法,只不过是用密钥来求取摘要值的散列算法。

HMAC_SHA1算法在身份验证和数据完整性方面可以得到很好的应用,在目前网络安全也得到较好的实现。

api接口调试工具:

http://open.qq.com/tools

QQ应用所使用到的相关技术

rails engines

rails engines 是什么?

一个 Rails应用程序实际上就是一个 “加强版”engine, 我们可以把engine看作一个微型的应用程序 ,因为 Rails::Application 继承了来自 Rails::Engine 的更多习惯。

 为什么使用rails engines?
  1. QQ应用的业务逻辑和主站基本相同,我们可以公用很多代码,从而提升维护性
  2. 使用方便,操作简洁(就相当于一个小rails)

创建步骤:

  1. rails plugin new qq_app –mountable 创建qq_app engine
  2. mount QqApp::Engine, at: ‘qq_app’ 挂载路由
  3. gem ‘qq_app’, path: ‘qq_app’ 挂载engine

这时,qq_app下就相当于一个独立的小rails 你可以在qq_app下执行创建controller,model等的操作

使用:

migrations操作

  • 子目录中:rails g model xxx / rails g migration xxx
  • 拷贝父目录中的数据 cp db/migrate/20130911154334_create_users.rb qq_app/db/migrate/
  • 修改代码数据(具体参考文档4.2)
  • rake railties:install:migrations (拷贝子目录的migration到父目录)
  • rake db:migrate

ActiveSupport::Concern

缘由:因为我们空间应用中许多比如model,helper,controller等都是一样的,如果全部拷贝的话,可维护性差,所以我们把这部分可以公用的代码给提取了出来, 使用了 ActiveSupport::Concern

源码:gems/activesupport-4.0.0/lib/active_support/concern.rb

ActiveSupport::Concern 主要用于模块的引用,作用: 1. 简化self.included 方法 2. 用于模块之间方法的相互调用

代码中 lib/concern/*

相关model都引用了 lib/concern/* 下的模块

ActiveRecord::Store

将任意格式的数据序列化保存到数据库中去。

参考文档:

腾讯应用开发文档:http://wiki.open.qq.com/wiki/PC%E5%BA%94%E7%94%A8%E6%8E%A5%E5%85%A5wiki%E7%B4%A2%E5%BC%95

rails engine文档:http://guides.rubyonrails.org/engines.html

active_record strore文档: http://api.rubyonrails.org/classes/ActiveRecord/Store.html