bundle outdated查看可更新的gems

四 5th, 2012

以前每次升级旧项目就直接‘bundle update’,但此前并不知道究竟会升级哪些gems,只有升级后用’gem diff Gemfile.lock’才知道。

Bundler 1.1新增了bundle outdated命令,用来显示Gemfile.lock中哪些gems有新版本,并显示新旧版本号。

这个是我执行后的结果,就类似这样:

�7�4  ~/railsapp/demo bundle outdated
Fetching gem metadata from https://rubygems.org/........

Outdated gems included in the bundle:
  * multi_json (1.2.0 > 1.1.0)
  * activesupport (3.2.3 > 3.2.2)
  * activemodel (3.2.3 > 3.2.2)
  * sprockets (2.4.0 > 2.1.2)
  * actionpack (3.2.3 > 3.2.2)
  * actionmailer (3.2.3 > 3.2.2)
  * activerecord (3.2.3 > 3.2.2)
  * activeresource (3.2.3 > 3.2.2)
  * json (1.6.6 > 1.6.5)
  * railties (3.2.3 > 3.2.2)
  * rails (3.2.3 > 3.2.2)
  * bootstrap-will_paginate (0.0.7 > 0.0.6)
  * chinese_pinyin (0.4.1 > 0.3.0)
  * orm_adapter (0.0.7 > 0.0.6)
  * guard-rspec (0.7.0 > 0.6.0)
  * guard-spork (0.6.0 > 0.5.2)
  * jquery-rails (2.0.2 > 2.0.1)
  * therubyracer (0.10.0 > 0.9.10)
  * less (2.1.0 > 2.0.11)
  * less-rails (2.2.0 > 2.1.8)
  * rspec-expectations (2.9.1 > 2.9.0)
  * twitter-bootstrap-rails (2.0.5 > 2.0.4)
  * uglifier (1.2.4 > 1.2.3)
标签:

Mac OS X中隐藏Spotlight 图标

四 4th, 2012

相信很多朋友和我一样,自从用了Alfred后,就很少用Spotlight了。它的图标还占着位置就觉得不爽,但是不能通过设置来隐藏,我们要自己做点小hack才行。

sudo chmod 600 /System/Library/CoreServices/Search.bundle/Contents/MacOS/Search
killall SystemUIServer     #重启killall SystemUIServer服务来刷新顶栏

怀念Spotlight了?恢复也很简单

sudo chmod 755 /System/Library/CoreServices/Search.bundle/Contents/MacOS/Search
killall SystemUIServer     #重启killall SystemUIServer服务来刷新顶栏
标签: ,

Linux下的NFS配置

三 22nd, 2012

虽然这种文章网上一堆,但我还是记录一下。

1. NFS介绍

NFS是Network File System的简写,即网络文件系统。NFS允许一个系统在网络上与它人共享目录和文件。

2. 安装

sudo apt-get install portmap			#这个客户端和服务器都需要,是网络传输协议。
sudo apt-get install nfs-kernel-server	#在服务器上安装nfs,客户端不需要。

3. 服务器端配置

vi /etc/export

添加:

/home/nfs/share       *(ro,sync)				#允许所有ip的读权限
/home/nfs/share       192.168.1.8(rw,sync,no_root_squas)		#只允许我写ip访问

其中:

/home/nfs/share是服务器要共享的目录
*代表所有ip
rw为读写,ro为只读
sync为立刻写入硬盘,rsync为先写入缓存
no_all_squash 保留共享文件的UID和GID(默认)
root_squash root用户的所有请求映射成如anonymous用户一样的权限(默认)
no_root_squas root用户具有根目录的完全管理访问权限(这个如果不配置会造成远程root用户只读)

4. 启动服务器

/etc/init.d/nfs-kernel-server start
chkconfig nfs-kernel-server on			#设置nfs开机自动启动

5. 客户端挂载

mount 192.168.1.1:/home/nfs/share    /mnt/nfs1    #192.168.1.1为服务器ip,挂载到本地/mnt/nfs1目录
umount /mnt/nfs1    					#取消挂载

在/etc/rc.local中添加“mount 192.168.1.1:/home/nfs/share /mnt/nfs1”可实现开机自动挂载。

我遇到的一个问题

在客户端root登录后对共享目录只读。
解法:
在服务器的/etc/export配置文件中加上”no_root_squas”。因为默认为”root-squas”,即默认客户端的root会被映射成匿名用户。

标签:

Rails 开发环境日志过大时自动清理

三 16th, 2012

新建文件:config/initializers/clear_logs.rb

例:开发模式下当日志大于10m时自动清理

# config/initializers/clear_logs.rb
if Rails.env.development?
  MAX_LOG_SIZE = 10.megabytes

  logs = [ File.join(Rails.root, 'log', 'development.log'), File.join(Rails.root, 'log', 'test.log') ]

  logs.each do |log|
    if File.size?(log).to_i > MAX_LOG_SIZE
      $stdout.puts "Removing Log: #{log}"
      `rm #{log}`
    end
  end
end
标签: ,

reverse_merge为方法设置默认参数的技巧

三 14th, 2012

先来看一下hash的merge方法。

h1 = { "a" => 100, "b" => 200 }
h2 = { "b" => 254, "c" => 300 }
h1.merge(h2)   #=> {"a"=>100, "b"=>254, "c"=>300}
h1             #=> {"a"=>100, "b"=>200}

reverse_merge的作用与merge正好相反,merge时后面的优先级高,reverse_merge时前面hash的优先级高。
注意:这个方法是rails的activesupport提供的,不是ruby自带的方法。

reverse_merge最常见的用处就是在rails中为方法的hash参数设置默认值。

下面来个示例。
给Partials中Locals参数设置默认值

# erb中
<%= display_product @product, :show_price => true %>
# helper中
def display_product(product, locals = {})
  locals.reverse_merge! :show_price => false
  render :partial => product, :locals => locals
end

上面的方法是推荐的方法,比较好,如果你觉得太麻烦,也可以用一些hack的方法,有点ugly。

在erb中直接

locals: { show_price: defined?(show_price) ? show_price : false }
标签:

让Ruby一个函数返回多个值

三 14th, 2012

ruby的

x, y = "a", "b"

语法真的很帅,有时一个函数需要返回多个值,两个结合可以写出很帅的代码。

如需要定义一个方法同时返回最大值max和最小值min:

class MyClass
 def some_method
   ["max", "min"]
 end
end

调用方法:

max, min = MyClass.new.some_method
标签:

ERB中<% ... -%> 与 <% ... %>的不同

三 12th, 2012

加-的作用是在标签结束后不输出空行。
如:

<div>
<% if true -%>
  Hi
<% end -%>
</div>

会输出

<div>
Hi
</div>

如果不加-会输出

<div>  

Hi

</div>
标签: ,

content_for与provider的比较

三 12th, 2012

我们知道erb模板向layout传值最好的方法是用content_for。
方法如下:

#/app/views/layouts/application.html.erb
<title><%= yield :title %></title>

#/app/views/projects/index.html.erb
<% content_for :title, "Projects" %> 

今天才注意到从rails 3.1开始增加了provide方法。

#/app/views/projects/index.html.erb
<% provide :title, "Projects" %>

如果你不用rails 3.1的新特性http streaming,content_for与provider作用基本相当。区别在于使用htp streaming时provider会在渲染页面时首先执行。而content_for是顺序执行,而且content_for会把多个结果拼接到一起后返回,所以当执行到第一个content_for是并不能立即返回,页面还在试图寻找有没有其它content_for。不能起来http streaming的效果。

具体参考:http://asciicasts.com/episodes/266-http-streaming

标签:

让git彩色显示

三 10th, 2012

新装的系统,不知为啥,”git diff, git status”默认单色显示,看起来很不直观。于是查了下资料,配置一下即可。
先来张效果图:

配置命令:

git config --global color.diff auto
git config --global color.status auto
git config --global color.branch auto
git config --global color.interactive auto
git config --global color.ui auto

也可以直接编辑~/.gitconfig,其实上面的命令就是往这个文件中添加了这些配置项。

[color]
    diff = auto
    branch = auto
    status = auto
    interactive = auto

查看自己都有哪些配置

git config --list
标签:

Linux查找和替换目录下所有文件中字符串

三 9th, 2012

单个文件中查找替换很简单,就不说了。文件夹下所有文件中字符串的查找替换就要记忆了,最近部署几十台linux服务器,记录下总结。

查找文件夹下包含字符串的文件

例:查找/usr/local目录下所有包含”rubyer.me”的文件。

grep -lr 'rubyer.me' /usr/local/*

vim替换单个文件中所有字符串方法

例:替换当前文件中所有old为new

:%s/old/new/g
#%表示替换说有行,g表示替换一行中所有匹配点。

替换文件夹下包含字符串的文件

sed结合grep
例:要将目录/www下面所有文件中的zhangsan都修改成lisi,这样做:

sed -i "s/old/new/g" `grep old -rl /www`
标签: