Archive for August, 2008

开始用 rails edge & git

Monday, August 18th, 2008

通过 git 在本地创建一个 rails edge:

git clone github.com/rails/rails.git

以后用 rails edge 创建 rails 项目的时候需要先更新一下 edge,然后用 edge 里面的 rails 脚本来创建项目:

cd ~/rails
git pull
ruby ~/rails/railties/bin/rails myapp

然后在项目中初始化一下 git repository:

git init

此时用 git status 查看可以看到项目中的所有目录都是 untacked,先创建一个 .gitignore,设置一下 git 的文件忽略规则:

log/*.log
tmp/**/*
doc/api
doc/plugin
doc/app
vendor/rails
config/database.yml

由于 git 不会管理空目录,所以如果我们想添加一个空的 log/ 和 tmp/ 到 git repository 中的话可以在两个目录里面分别创建一个 .gitignore:

touch tmp/.gitignore
touch log/.gitignore

然后添加所有 untracked file 并 commit 所有的东西:

git add .
git commit -m ‘init rails project’

再用 git status 看看,nothing to commit (working directory clean)

最后添加一下远程 repository 的地址再将所有刚才 commit 的东西 push 到远端:

git remote add origin your_repository_path
git push origin master

这时就完成所有的提交工作了。

以后写代码的时候,先创建自己的一个 branch,尽量不要在 master branch 上直接修改:

git branch -b my_branch

修改完成准备提交的时候,回到 master branch 上和自己刚才工作的 branch 进行 merge,然后再提交:

git checkout master
git merge my_branch

因为要用 rails edge,所以肯定要在 vendor/ 中 freeze rails edge,一个可以用 rake rails:freeze:edge,这样是下载 rubyonrails.org 上面的一个 edge.zip;另一种方法可以使用从 rails edge 的 git repository 上 clone 一个:

git submodule add github.com/rails/rails.git vendor/rails
git submodule init
git submodule update

好了现在基本可以干活了。

参考文章:
http://www.robinlu.com/blog/archives/194
http://toolmantim.com/article/2007/12/5/setting_up_a_new_rails_app_with_git
http://www.caiwangqin.com/post/527

ruby gems compatible issue

Tuesday, August 12th, 2008

装了 Rails 2.1 以后升级了一些相应的 gems,比如 rubyforge, rubygem 之类。再到一个 Rails 1.2.3 的项目下运行 script/server, 收到错误提示:

can’t activate rubyforge (=0.4.4), already activated rubyforge-1.0.0

搜索一下很多人遇到同样的问题,因为安装的 rubyforge 版本太多了,解决方法就是删掉所有的再装一个最新版:

sudo gem uninstall -a rubyforge
sudo gem install rubyforge

再运行又遇到问题:

RedCloth is not a class (TypeError)

RedCloth 之前用的 3.0.4,后来装了 4.0.1,据说 4.x 的 main class 不再是 RedCloth,而改成了 RedCloth::TextileDoc,无语。后来发现新的 rubygems 可以指定版本来引入 gem:

require ‘rubygems’
gem ‘RedCloth’, ‘3.0.4′

再测试问题解决,或许将 3.0.4 freeze 到 vendor 下更好些?

undefine method ‘require_gem’

Sunday, August 10th, 2008

最近开始用 Rails 2.1,升级了 gem,之后在以前的 1.2.3 的项目中使用 rake db:migrate,提示

undefined method `require_gem’ for main:Object (NoMethodError)

搜索结果说 require_gem 变成了 gem,有个解决方法是装新版的 rake:

gem install –remote rake

问题解决,今天用 rails 创建新项目的时候又遇到 undefine method ‘require_gem’ 的问题,直接将 rails 脚本里面的一个 require_gem 改成 gem,问题解决。

但是别的包里面的 require_gem 怎么办呢?