瞎扯淡 最后一天不能给荒废了...开始学习 Rails...直播中

n00b1 · 2012年12月21日 · 最后由 n00b1 回复于 2012年12月21日 · 4987 次阅读

距离下午 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 这样访问了。

#1 楼 @yesmeck 感谢!我也搜到一个解决方案,正在尝试中:

修改 VagrantFile,加入以下内容:

Vagrant::Config.run do |config|
 # Forward guest port 3000 to host port 8088
 config.vm.forward_port(3000, 8088)
end

更新:这个方法能行~也再次感谢 yesmeck

攻下一个障碍后,继续~

脚手架搭上

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 到底是什么版本的...

为什么不用最新版呢。。

#4 楼 @yesmeck rails 吗?head first rails 书上就用的 2.1 版本,跟着书来咯

建议你换本新一点的书,这样去解决因为版本太旧而遇上的问题完全没必要的。

#6 楼 @yesmeck 都说这本书对于新手最友好,条例清楚,所以才选的它,但开始觉得你说的对了,现在卡在 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.

@zw963 @Levan 我搜到两位也是很推崇这本书的,好奇你们当时遇到了我这么多问题吗?

需要 登录 后方可回复, 如果你还没有账号请 注册新账号