本文只限Window用户。
今天闹腾了半天,总算把ROR环境和Ruby-Mysql的驱动搞定。整理此文,献给和我一样入门的新手,希望能帮助大家早点配置好Ruby相关环境早点踏上Ruby的征途。
搜索方法:在主页右上角,选择"Software/Group",输入"软件名称",点击"Search"按钮。
该页面列出了Ruby当前的所有版本,写本文时最新版本是:1.8.6-25。版本发布日期:2007-03-18
2、下载"ruby186-25.exe",大约22M。然后安装。One-Click Installer 一键安装,很适合新手。
3、学过Java的都知道,接下来需要配置ClassPath,在环境变量中新增环境变量名"RUBY_HOME",变量值"D:\ruby",该值以本机Ruby安装目录为准。然后在 path 加入"%BURY_HOME%\bin"。
4、测试Ruby是否安装成功
在命令行下运行 ruby -v ,显示如下:
ruby 1.8.6 (2007-03-13 patchlevel 0) [i386-mswin32]
如果不放心,再运行 ruby -e 'puts "hello world"' ,显示如下:
hello world
至此,Ruby的安装告一段落,接下安装 Rails。
5、安装Rails之前需要按顺序安装以下模块:
最后才是 rails
注意: Rails版本与这五个模块版本要匹配才可以正确安装。
这里共享一下怎么匹配版本的方法。(以Rails
一、下载Rails 1.2.3.gem,在D:\rails目录下。
在命令行下进入"D:\rails",运行 gem install rails-1.2.3.gem ,命令行会显示出错信息,仔细看该信息,你会发现
该信息中会提示在安装 rails之前必须安装 "activesupport -1.4.2",连安装模块的名称和具体版本都列出来了。
安装好"activesupport-1.4.2"之后,继续上一步骤,这次会提示安装"activerecord-1.15.3",其他模块的步骤都一样。
二、仔细看Rails 1.2.3版本的发布日期,是"2007-03-13"。因为这五个模块一般是和Rail同步发布的。你只需要在下载列表
中找到对应发布日期的模块下载即可。如果不是同一天,自然是找时间相隔最近的版本
到此,RoR环境告一段落。再推荐一篇文章,本人Ror环境之前也得益于该文档。
6、这个才是本文的重点,关于 Mysql数据库驱动配置,我的弯路就是在这里折腾的。
一、安装Mysql 5.0, http://dev.mysql.com/downloads/mysql/5.0.html 下载一个 Windows (x86) ZIP/Setup.EXE,如果是64位操作系统,请下载对应的版本。 我用的是 AMD64/WinXP
二、安装mysql时,记得字符编码要选择"utf-8",我之前用的gb2312,命令行读取没问题,但是用Ruy读出来的都是乱码。
三、在Mysql安装目录的 bin 目录下,找到 ibmySQL.dll,将该文件Copy到 Ruby安装目录的 bin目录中。这里也有一个版本的问题。我数据库用的是Mysql 5.0.41,每次操作数据库都会报"内存分配错误",没办法,只好 使用Mysql 5.0.37的 ibmySQL.dll 文件,问题解决。
四、http://rubyforge.org/projects/mysql-win ,下载 mysql-2.7.3-mswin32.gem ,这是 mysql_Ruby驱动程序。
命令行,进入该文件所在目录,运行 gem install mysql-2.7.3-mswin32.gem ,安装成功即可。
你也可以在 mysql官方网站下载 ruby的驱动,该网站附带安装步骤,API文档。
五、测试 mysql 驱动程序。
新建 mytest..rb ,代码如下:
ruby 代码
require 'mysql'
begin
dbh = Mysql.real_connect("localhost","root","root","library",3306)
## 创建表,插入计录,查询计录
dbh.query("drop table if exists test_rb")
dbh.query("create table test_rb(id int,name char(20))")
dbh.query("insert into test_rb values(1,'张三'),(2,'李四')")
printf"%d rows were inserted\n",dbh.affected_rows
res = dbh.query("SELECT name FROM test_rb")
puts"========\n"
whilerow = res.fetch_rowdo
printf"%s, %s\n", row[0], row[1]
end
puts"========\n"
puts"Server version: "+ dbh.get_server_info
rescueMysql::Error => e
puts"Error code: #{e.errno}"
puts"Error message: #{e.error}"
puts"Error SQLSTATE: #{e.sqlstate}"ife.respond_to?("sqlstate")
ensure
dbh.closeifdbh
end
在命令行运行 ruby mytest.rb,结果如下:
2 rows were inserted
========
张三,
李四,
========
Server version: 5.0.41-community-nt
分享到:
2007-05-27 17:49
浏览 5148
论坛回复 / 浏览 (9 / 14393)
评论
10 楼
zhuangj
2008-04-25
[color=cyan][/color][size=small][/size][align=left][/align]LZ好东西
9 楼
newpeter
2007-06-24
xiaoqiu369 写道
我按你的步骤做,出现了以下问题.C:/Documents and Settings/Administrator/user/demo/test.rb:16: uninitialized constant Mysql (NameError)
我这个例子有数据库访问操作。自然你需要建立数据库library,端口:3306。 表就不用创建了。
楼上说的InstantRails,我安装过,的确很省事。该有的都有。
但我自己一个一个安装,也可以多学点,毕竟写这篇文章时,也刚学习配置ruby环境。但作为新手,折腾自己是个必经过程。
8 楼
jwlhl
2007-06-20
是生产环境还是开发环境?
如果是开发环境,直接下载InstantRails,解压之后ruby、rails、apache、mysql什么都有了,甚至还有phpMyAdmin来做mysql的管理,而且都已经配置好了,直接可以用。
而且就算是生产环境,也可以用gem在线安装rails及其所有依赖的包吧,为什么要这样一个一个手动下载来安装呢?是因为网速的原因么?
7 楼
netfishx
2007-06-13
jack 写道
如果我没有记错的话,安装mysql,安装rails之后,直接就可以连接mysql了。无需额外操作,不太明白为什么还需要那么多额外的操作
生产环境额外安装mysql驱动有意义,那是c的实现吧
不过楼主的方式实在是。。。
6 楼
Readonly
2007-06-13
下载 InstantRails,然后...没有然后了...
5 楼
jack
2007-06-13
如果我没有记错的话,安装mysql,安装rails之后,直接就可以连接mysql了。无需额外操作,不太明白为什么还需要那么多额外的操作
4 楼
xiaoqiu369
2007-06-13
楼上说的是何意?因为刚接触这东西,不了解.
require_gem "mysql"
begin
dbh=Mysql.real_connect("localhost","root","admin","test",3306)
dbh.query("drop table if exists test_rb")
dbh.query("create table test_rb(id int,name varchar(20))")
dbh.query("insert into test_rb values(1,'ss')")
dbh.query("insert into test_rb values(1,'aaa')")
printf "%d rows were inserted\n",dbh.affected_rows
res=dbh.query("SELECT name FROM test_rb")
puts "===============\n"
while row=res.fetch_row do
printf "%s,%s\n",row[0],row[1]
end
puts "================\n"
puts "Server version:"+dbh.get_server_info
rescue Mysql::Error=>e
puts "Error code:#{e.errno}"
puts "Error message:#{e.error}"
puts "Error SQLSTATE:#{e.sqlstate}" if e.respond_to?("sqlstate")
ensure
dbh.close if dbh
end
改成这样就可以了.但是不知道是什么原因.
3 楼
jack
2007-06-13
用mysql有这么复杂吗?
2 楼
netfishx
2007-06-13
暴寒,这是故意折腾自己吗
1 楼
xiaoqiu369
2007-06-13
我按你的步骤做,出现了以下问题.C:/Documents and Settings/Administrator/user/demo/test.rb:16: uninitialized constant Mysql (NameError)