记录一下我在搭建环境时出现的问题,我相信会有新手和我一样遇到这样的问题。
说一下环境:ruby 版本 2.0.0p247,rails 版本 4.0.0。
说一下学习 ruby on rails 的目的:我现在是大二的学生,因为各种原因开始了一个项目,要用到的是我从来没听过的 ruby on rails,我甚至连网络框架都是第一次听,在学习 ror 之前我只学过 C 语言和数据结构以及语言是 C++ 的游戏引擎而已,我相信如果我真能学会 ror 的话,这会是一个相当励志的故事。希望各位社区的大牛们多多指教,如果我会知道新手问题的答案的话,果断帮忙。(我很渣也不知道会不会的其实)
1.因为看到有个帖子说前往不要在 windows 下开发,所以我就奔去安装 linux 了,我安装的是 deepin linux 12.12.1,但是貌似我的电脑(联想 Y410P)和这个系统不兼容,然后我开了一个小时机才进入桌面,这个问题到现在也不能解决,不过进入系统之后不卡就先放下这个问题了。(如果有人遇到这个问题,成功解决掉的话分享一下,不甚感激)
2.按照 Ruby on Rails 實戰聖經,安装了 ruby,然后用
$ gem install rails --no-ri --no-rdoc
遇到问题了,老是报这样的错
ERROR: Loading command: install (LoadError)
cannot load such file -- openssl
ERROR: While executing gem ... (NoMethodError)
undefined method `invoke_with_build_args' for nil:NilClass
装了很多次都是报这个错,都是不行,最后灰心意冷的我重装了 ruby,然后竟然神奇的没再报这个错了。 不过你以为搭建一个环境容易吗?不报错也别开心太早。因为它不报这个错就会报下一个错的。
3.然后就出现接下来的问题了
Could not find a valid gem 'rails' (>= 0) in any repository
各种泪目,我就只好去找度娘,度娘高深莫测地说,孩子你要翻墙,才能得到救赎。问题是我才刚装了 liunx 没多久,怎么要用终端翻墙(我觉得下载都是在终端所以翻墙也是要终端翻吧),太高端了,我终觉得是安装方式有问题才搞得这么麻烦,所以我依葫芦画瓢按照 wiki 上的如何快速正确的安装 Ruby, Rails 运行环境来了一遍http://ruby-china.org/wiki/install_ruby_guide,最后
gem install rails
成功了, 。搞了这么久就是这个,所以说要多看看 wiki 诶
4.安装了这么久当然要去弄一个 helloworld 什么的,这 helloworld 不去弄一下,总觉得自己没学过这东西一样。之前搞游戏引擎的时候也就是成功弄出了 helloworld 之后就觉得自己学会引擎一样特有成就感,我想着这 ruby 应该也是要这样。所以果断
$ mkdir projects
$ cd projects
$ rails new demo
然后
$ bundle install
然后犯难了
Bundler::GemfileNotFound
这是怎么闹,魂淡,不就建个 helloworld 而已,不用这么折腾我吧。我又跑去找万能的度娘,然后度娘喷了我一脸,你傻逼啊,你都不进去文件夹 bundle 毛线。好,我错了。
$ cd demo
5.我以为这就是最后的考验,没想到,bundle 就遇到这样的问题了
An error occurred while installing coffee-script-source (1.6.3), and Bundler
cannot continue.
Make sure that `gem install coffee-script-source -v '1.6.3'` succeeds before
bundling.
我就按照他的指示
$ sudo gem install coffee-script-source -v '1.6.3'
没多久又报了差不多的错,我 bundle 了一个小时还没完,找度娘,度娘嫌我太笨没告诉我问题所在,灰心丧气外加作死赌气之下敲了
$ sudo bundle install
好吧,其实前面个也有说权限问题,由于报错的我就只看着红色字体然后自动忽略掉了
6.好吧,终于可以到神圣的
$ rails s
了,但是我这真心曲折,又遇到了新问题
Could not find a JavaScript runtime. See https://github.com/sstephenson/execjs for a list of available runtimes. (ExecJS::RuntimeUnavailable)
不过这个问题一上网找就能找到解决方案了,直接在 Gemfile 里面加入
gem 'therubyracer'
gem 'execjs'
然后就成功了(喂,还要 bundle 一次吧,别和谐掉关键字啊)
7.我在 view 上补充了一些东西,然后再
$ rails s
又报了
Address already in use - bind(2) (Errno::EADDRINUSE)
的错。这明显就是你打电话过去然后智能客服姐姐告诉你,你在拨打的电话正在通话中的节奏,重点的还是和对方通话中的就是你自己另一台手机。这里有两种做法,一种就是直接用你正在通话中的手机,另一种就是你挂掉那个正在通话的手机再拨打一次电话过去。这很明显第二种方法是脑袋有洞的做法,但是这样的做法我持续了一个礼拜才意识到这是有病的做法。不过当你是要换一个工程的时候还是需要 kill 掉连接的吧,所以还是贴一下步骤。
$ netstat netstat netstat -ntlp | grep 3000
$ kill -9 ×××(***就是上一个命令最后那个数)
8.之后我按照之前的 Ruby on Rails 實戰聖經,依葫芦画瓢,scaffold 鷹架功能會自動產生一組 Model、Views 跟 Controller 程式碼,
$ rails g scaffold person name:string bio:text time:string
$ bundle exec rake db:migrate
问题是没有弹出应该弹出来的东西(确切来说是什么都没有弹出来),我也没有管太多,直接 rails s 然后主页君就爆出要我去执行一下
rake db:migrate RAILS_ENV=development
执行一下,然后就爆出错误
We're sorry, but something went wrong.
If you are the application owner check the logs for more information
此时此刻内心汹涌出 N 只羊驼,敲个代码这容易么我。 但是我还是执着的跑到 log 文档看看,然后 log 最后一行说 time:string 是不合法的,要么删掉要么就改一下格式
还有一种错法是主页显示
NoMethodError in StudentCoursesController#create
undefined method `Classroomnumber' for #<StudentCourse:0xb994811c>
Extracted source (around line #30):
respond_to do |format|
if @student_course.save
format.html { redirect_to @student_course, notice: 'Student course was successfully created.' }
format.json { render action: 'show', status: :created, location: @student_course }
else
这个时候我就大概知道 classroomNumber 写成 Classroomnumber 了。错多了就习惯了。
总之搞到现在,内心是各种挫败感交集,学习之路一片渺茫 还有,请大牛们不要喷我这些低级错误,刚入门啥都不懂