RoR初学笔记
今天开始学习RoR,刚开始入门就遇到一些问题,记笔记如下。以下运行环境均为MacOS 10.6 + MacPorts 2.0.4,ruby为MacPorts下的ruby1.9.3-p125_0。
rails-3.2.3升级到rails-3.2.7的问题
由于教程使用的rails版本是3.2.7,而我以前安装的rails为3.2.3,于是想升级一下。
$ rails -v
Rails 3.2.3
$ sudo gem update rails
...
Successfully installed rails-3.2.7
gem报告已正确安装了rails-3.2.7,查看gem list的确也安装成功了:
$ gem list --local
...
rails (3.2.7, 3.2.3)
但运行rails的版本号还是3.2.3:
$ rails -v
Rails 3.2.3
百思不得其解。后来查看rails-3.2.7的升级指南时发现,gem版本必须>=1.8.24,而我的gem版本为1.8.22。于是先升级了下gem:
$ gem update --system
升级之后再运行rails就正确了(不用重新gem update rails了):
$ rails -v
Rails 3.2.7
bundle exec rake db:migrate错误
按照教程更新数据库时发生错误:
$ bundle exec rake db:migrate
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/rubygems/dependency.rb:52:in `initialize': Valid types are [:development, :runtime], not nil (ArgumentError)
查明原因,原来是我用的ruby为MacPorts中的ruby1.9,实际的可执行文件为/opt/local/bin/ruby19
,为了方便使用,我做了符号链接:
$ ls -l /opt/local/bin/ruby
lrwxr-xr-x 1 root admin 7 25 Apr 10:39 /opt/local/bin/ruby -> ruby1.9
但rake
命令仍然是Mac系统自带的rake(囧):
$ which rake
/usr/bin/rake
解决办法就简单了。由于我的PATH设置中/opt/local/bin
优先于/usr/bin
,那么只需在/opt/local/bin
下建立rake19
的符号链接就行了。
$ cd /opt/local/bin
$ sudo ln -s rake19 rake