以前每次升级旧项目就直接‘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)
相信很多朋友和我一样,自从用了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服务来刷新顶栏
虽然这种文章网上一堆,但我还是记录一下。
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会被映射成匿名用户。
新建文件: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
先来看一下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的
x, y = "a", "b"
语法真的很帅,有时一个函数需要返回多个值,两个结合可以写出很帅的代码。
如需要定义一个方法同时返回最大值max和最小值min:
class MyClass
def some_method
["max", "min"]
end
end
调用方法:
max, min = MyClass.new.some_method
加-的作用是在标签结束后不输出空行。
如:
<div>
<% if true -%>
Hi
<% end -%>
</div>
会输出
<div>
Hi
</div>
如果不加-会输出
<div>
Hi
</div>
我们知道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 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服务器,记录下总结。
查找文件夹下包含字符串的文件
例:查找/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`
标签: