距离下午 3 点还有几个小时,不能白等,还是做点有意义的事吧,开始跟着 Head First Rails 学习 Rails,直播更新中...也实验下我这小白这几个钟头能学到啥程度...
Okay, here we go! 起步就遇到了问题:
环境是用的 vagrant
vagrant up
rails 2.1 已出乎意料容易的安装好了
sudo gem install rails -v 2.1
开始第一个例子
rails tickets
启动 WEBrick
ruby script/server
回到宿主访问 localhost:3000 貌似不行...linux 也不太熟,ifconfig 看了下 vagrant 虚拟机的 ip 好象是 10.0.2.15,但宿主中 10.0.2.15:3000 也不行...
设置成 hostonly
config.vm.network :hostonly, "192.168.33.3"`
然后就可以 192.168.33.3:3000
这样访问了。
攻下一个障碍后,继续~
脚手架搭上
ruby script/generate scaffold ticket name:string seat_id_seq:string address:text price_paid:decimal email_address:string
敲下回车后报错不少,吓我一跳,定睛一看大多都是说有些 gem depreciated 了,也正常,毕竟 2.1 算是很老的版本了吧,除此之外还好貌似一切正常,重新启动服务器后,访问页面报错,且和书中的不一样
no such file to load -- sqlite3
看来我还没有安装数据库,闷着头试试
sudo gem install sqlite3
但是不行,报错提示
Fetching: sqlite3-1.3.6.gem (100%)
Building native extensions. This could take a while...
ERROR: Error installing sqlite3:
...
sqlite3.h is missing
根据'sqlite3.h is missing'搜索到了解决方案
sudo apt-get install libsqlite3-dev
sudo gem install sqlite3-ruby
但还是被报错 ERROR: Error installing sqlite3-ruby: ERROR: Failed to build gem native extension.
再次搜索解决方案,尝试降低版本安装
sudo gem install sqlite3-ruby --version 1.2.3
同样报错,damn,书上用的 sqlite3 到底是什么版本的...
从 sqlite3-ruby-1.2.1 到 4 都尝试了,还是不行,O'Reilly 官方论坛上也有人问这个问题,给出的答复是 1.2.2 能行,但对于我无效...这本书一来不说清楚环境版本这些真是害死人...
看来 Head First,一头扎进去是不行的... 问题这样解决了:
$ sudo apt-get update
$ sudo apt-get upgrade
sudo apt-get install build-essential bison openssl libreadline6 libreadline6-dev curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-0 libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf libc6-dev
sudo gem install sqlite3-ruby
#11 楼 @xiaolai 早饭时候看报纸说的是下午 3 点过...嗯...anyway,午饭后继续啦~
更新: 简直是一步一个雷啊 回来第一件事
rake db:migrate
结果被告知 rake aborted! ERROR: 'rake/rdoctask' is obsolete and no longer supported. Use 'rdoc/task' (available in RDoc 2.4.2+) instead. /vagrant/tickets/Rakefile:8
更新: 根据官网的说法问题还是出在 sqlite3 版本上,之前装了 n 个版本也不知道默认 rails 是使用哪个版本的 sqlite3 了(以最后安装的版本为准?),找不到解决方案,destory 了 vm 重来过...
重头来过
vagrant up
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install build-essential bison openssl libreadline6 libreadline6-dev curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-0 libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf libc6-dev
sudo gem install rails -v 2.1
rails tickets
ruby script/generate scaffold ticket name:string seat_id_seq:string address:text price_paid:decimal email_address:string
ruby script/server
这次没有碰到 sqlite3 的报错,而是: CGI::Session::CookieStore::TamperedWithCookie 不知道是不是和 generate scaffold 时候的报错 (如下) 有关系,但奇怪的是刚才都没有遇到这个报错 /opt/vagrant_ruby/lib/ruby/gems/1.8/gems/rails-2.1.0/lib/rails_generator/lookup.rb:211:Warning: Gem::cache is deprecated and will be removed on or after August 2011. Use Gem::source_index.