about 10 years ago

在Rails中进行测试时,可以使用fixtures来构建测试数据,Fixtures会把对应的Yaml文件加在到测试数据库中方便测试。

昨天在测试password验证时碰到个问题,因为数据库中存的是Hash和Salt,那我要如何在对应的users.yml文件中来生成这些hash和salt呢?其实yml文件支持erb表达式的。

generate hash and salt in yaml files
<% require 'digest/md5' %>
<% SALT = BCrypt::Engine.generate_salt unless defined? SALT %>
one:
  name: user1
  email: jun1st@live.com
  password_salt: <%= SALT %>
  password_hash: <%= BCrypt::Engine.hash_secret('ABCD1234a', SALT) %>
 
over 10 years ago

7月1号,Google关闭Google Reader的日子马上就到了。

Feedly, Digg纷纷推出了他们的RSS订阅服务(Feedly早就有了),但是我确觉得这个Reader关了就关了吧,因为我已经很少打开我的Reader程序了,不管是在Mac上,还是在iPhone/iPad上。 因为我用Zite,这个我认为是2.0版的RSS Reader。

RSS to Zite to Pocket

RSS是订阅发布的方式,Zite在RSS的基础上增加了推荐功能,它能根据你的订阅,Twitter,Facebook等信息给你推荐你可能感兴趣的文章。

Zite首页,导航条昨天的列表按钮还能选择各个分类

进入某篇文章之后,文章内容已经做过了Readibility优化了,

可以在下方对这篇文章进行投票,你喜欢还是不喜欢这文章?Zite会根据你的投票来调整推荐算法。

同时如果文章内容比较长,或者你想稍后再读,可以把文章share到pocket等read it later服务(iOS 7beta版本问题,share有点乱)

Pocket to Evernot through IFTTT

当你在Pocket中读完某篇文章时,使用Archive可以把它从你的阅读队列里删去,

但是如果你觉得这篇文章很有用,想保存文章内容时,该怎么办呢?不存档?那你的阅读列表就越来越长,直到你都分不清楚那篇是读过的,哪篇是没有读过的。

更好的方法是使用IFTTT的服务把Pocket中存档的文章备份到Evernote中。Pocket是阅读列表,而Evernote是你的库。

IFTTT把已读pocket文章保存到evernote的recipe

 
over 10 years ago

My First post in Logdown!

 
over 10 years ago

在把我的Rails程序升级到4.0rc1之后,需要设置一个secret_key_base。这个key的是用来加密你的cookie的,

Rails 4.0 introduces ActiveSupport::KeyGenerator and uses this as a base from which to generate and verify signed cookies (among other things).

具体的解释,看官方文档

生成一个key非常简单,

secret token uisng ruby
irb #进入irb
require 'securerandom'
SecureRandom.hex(64)

还有更简单的,在Rail程序的目录里

generate a secret token using rake
rake secret
 
over 10 years ago

无论你是新手还是老妖,作为一个开发人员,查看文档是都无法避免。想要像查单词一样查API吗?

下载ruby, rails,并解压

然后复制到/Library/Dictionary目录下,重启Dictionary,在Preference中选择Rails和Ruby.

 
over 10 years ago

在Rails开发中,Postgresql现在是最热门的数据库了,我也把我的项目从mysql转到了postgresql, 刚开始在ubuntu上配置碰到了好些个问题,Google了好些资料,这里总结一下,算是备份。

sudo apt-get install postgresql

切换到用户postgre

sudo su postgres

创建就可以创建数据库用户,修改密码

createuser railsUser;
alter user railsUser with password 'password'

创建数据库

createdb -p 5432 -O railsUser -U railsUser -E UTF8 MyRailsProject

备份还原数据库

pg_dump -p 5432 -h localhost -Fc -U railsUser --no-owner MyRailsProject > ~/myrails.pgdump
pg_restore -p 5432 -h localhost -Fc -d MyRailsProject -U railsUser --no-owner < ~/myrails.pgdump

如果Web和DB服务器是在同一台,那么可以设置Postgresql只允许localhost访问,

sudo vim /etc/postgresql/9.1/main/postgresql.conf

取消listen_address的注释

listen_address = 'localhost'

常用的命令

\l #显示所有数据库
\d tablename #describe
\q #quit
\c #connect database

\dt #所有table
\du #所有users 
 
over 10 years ago

Ruby中的有所谓的Bang Method,就是方法名称后有!的,比如capitalize!

Methods that include an exclamation point, such as capitalize are known as dangerous methods. In Ruby speak, that means they will modify the object it’s called on

但是在Rails ActiveRecord中,Bang方法还会抛出异常,而不是返回true/false, 比如save!

但是今天要说的是另外一种情况,就是在Rails的seed文件中,在production环境下,我执行rake db:seed 始终出现第一条纪录,

City.create(name: 'Chicago')
City.create(name: 'Copenhagen')

没有任何提示,也没有任何异常。直到我使用对应的bang方法,才正确执行,

City.create!(name: 'Chicago')
City.create!(name: 'Copenhagen')

不清楚为什么,也许是因为production环境?

 
over 10 years ago

Strong Parameters

Routes and ThreadSafty

 
over 10 years ago

前两天把一个Rails项目从3.2升级到了4.0 rc1, 然后又看到消息说Rubymine更新了,开始支持Rails4了,于是就更新到了最新版,5.4.2, 不过没看到有什么明显的变化,但是确发现不能启动Server,总是碰到这个错误

Rails 3.x launcher script was found instead of Rails 4.x one. You need '/Users/fengqijun/Documents/workspace/yourproject/bin/rails' script to launch Rails server. Please update server launcher according to Rails 4.x documentation.

有问题,找Google,但是没找到什么有用的信息,只在Stackoverflow上找到一条说是因为项目中有Rails Gem用的是旧的,比如3.x的和2.x的共存,就会出现这种问题。但是我这机器上只有一个4.0rc的,所以应该就不是这个问题了。

前两天也懒得弄,今天又试了一把,发现还是这样。开始觉得可能是RubyMine生成的Project的设置的问题,所以就建了一个全新的项目,运行,成功,但是看到运行的是那个项目下/bin/rails这个,新建的项目有一个bin文件夹,文件夹里有Rails,Rake,Bundle,

rails
rake
bundle

把这个bin文件夹复制到原先那个项目中,Bingo,就能在rubymine中开启server了。

但是,这也太傻了点吧,发现旧项目中没有就不会生成一个吗?还好意思卖那个价,虽然我是用2折的价钱买的。

Silly RubyMine!

 
over 10 years ago

前两天发现了一款很好用的搜索字幕的App,叫做subtitles,免费,好用。作者刚刚更新了程序,目前版本是2.0.

使用非常简单,只要把视频文件拖进app的界面里,它就会开始搜索

search subtitles

右边的“勾”表示字幕搜索成功了,字幕文件会存放到视频文件所在的目录,并且跟视频文件同名。非常方便。

此外,还可以在Preference中设置你的首选语言,

search subtitles

如果Primary Language搜索不到,就会搜索Secondary Language。因为字幕是从Open Subtitles上搜索下来的,所以,基本上找不到中文的, Sigh.

PS:如果字幕文件下载成功了,但是加载字幕失败,很可能是字幕文件选用的字体系统不支持,需要换一个字幕文件。