All Posts

你可能不知道的git rerere

rerere 是啥的缩写? rerere = reuse recorded resolution rerere是干啥用的? 它会让Git记住你是如何解决某个文件的两个版本之间的conflict,这样在下次Git遇到同样的文件在相同的两个版本间发生冲突时,可以自动帮你使用相同的方法解决冲突。 如何启用rerere? git config --global rerere.enabled true 或是 在repo目录里mkdir .git/rr-cache 不过推荐前者。 能举例说明吗? 参考inline的注释。 $ git init git-rerere-test Initialized empty Git repository in /cygdrive/e/test/git-rerere-test/.git/ $ cd git-rerere-test $ git config rerere.enabled true # 开启rerere功能 $ echo "What fruit do you like?" >> question $ git add . && git commit -m "initial drop" [master (root-commit) af9fdf9] initial drop 1 files changed, 1 insertions(+), 0 deletions(-) create mode 100644 question $ git branch test # 创建test分支 $ echo "I like orange" >> question $ git add .

sidekiq初体验

今天Kevin讲了background job,提到了Resque和Sidekiq,并推荐我们使用Sidekiq。于是初步体验了一下。 Sidekiq在其项目主页上写到: What if 1 Sidekiq process could do the work of 20 Resque or DelayedJob processes? 口气不小啊…⊙﹏⊙b 安装 只需在Gemfile里添加 gem 'sidekiq' 然后执行bundle install即可。 使用 这里拿课程中的一段真实code举例说明。在该项目中有一个UserController在新用户注册时会发送欢迎邮件,但是此处发送邮件是一个同步的操作,如果你的网络不稳定则用户在点击注册后可能会等很长时间才能看到注册成功的页面,我们要把发送欢迎邮件的操作转换成一个异步的后台任务。使用Sidekiq前的code如下: if @user.save AppMailer.send_welcome_email(@user.id).deliver 要把它转为后台任务,只需改为: if @user.save AppMailer.delay.send_welcome_email(@user.id) 测试 改完之后在开发环境中测试正常,接着跑rspec发现有3个spec失败,这三个spec内容如下: it "sends out email" do expect { post :create, user: Fabricate.attributes_for(:user) }.to change{ ActionMailer::Base.deliveries.size }.by(1) end it "sends to the right recipient" do post :create, user: Fabricate.attributes_for(:user) email = ActionMailer::Base.deliveries.last expect(email.