安装Ruby On Rails
1. 下载Ruby,我用的是1.8.6,下载地址:http://rubyforge.org/frs/?group_id=167。下载后直接双击安装就可以了。
2. 在命令行窗口中,运行gem命令,看是否已经包含了rubygems。如果没有,则下载,然后运行ruby setup.rb安装;若已经包含,进入第3步。
3. 在命令行窗口中,直接运行gem install rails开始安装Rails。
4. 运行rails myapp就可以创建一个名称myapp的ROR程序。
这样就完成了Ruby On Rails的安装,并且创建了myapp程序,接下来就为其添加MySQL数据库支持。
安装MySQL
1. 下载MySQL(http://dev.mysql.com/downloads/mysql/5.1.html#win32),这里使用的MySQL5.1.31.
2. 安装MySQL,并配置MySQL,其中要选中Include Bin Directory in Windows PATH。
3. 创建数据库。运行MySQL Command Line Client,登录后运行:
mysql> create database myapp_development;
配置MySQL
1. 首先运行gem install mysql命令,绑定mysql数据库。
2. 编辑myapp目录中config/database.yml文件。其中默认的可能是SQLite数据库,这里修改为MySQL数据库,以development为例:
development:
adapter: mysql
encoding: utf8
database: myapp_development
username: root
password: root
3. 注意这时候应该重启电脑,否则如果直接启动服务器,访问http://localhost:3000,页面上就弹出libmysql.dll错误提示。重启后,再访问就可以在首页中看到环境信息,如下:
Ruby version | 1.8.6 (i386-mswin32) |
RubyGems version | 1.3.1 |
Rails version | 2.2.2 |
Active Record version | 2.2.2 |
Action Pack version | 2.2.2 |
Active Resource version | 2.2.2 |
Action Mailer version | 2.2.2 |
Active Support version | 2.2.2 |
Application root | D:/rails/myapp |
Environment | development |
Database adapter | mysql |
Database schema version | 10 |
TroubleShooting
数据库已经连上了,下面就是创建数据库表了。由于已经在Ubuntu上创建过类似程序,这里就把编写Migration文件的步骤和时间省去了,直接运行rake db:migrate,就在这时问题出现了。问题表现出两种情况:
1. 错误信息为:
(in D:/rails/myapp)
** Invoke db:migrate (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute db:migrate
rake aborted!
undefined method `each' for #<Mysql:0x5cdda84>
在该种情况中,可能会有部分migration运行成功,但是并不能顺利执行。
2. 错误信息中包含了:ruby/gems/1.8/gems/activesupport-2.2.2/lib/active_support/core_ext/module/introspection.rb:73: [BUG] Segmentation fault
无论这两种情况有时候会交替出现,当然导致的结果就是migration不能顺利执行。
原因分析:MySQL中包含的libmysql.dll不能正常运行。
解决方法:
替换自带的libmysql.dll,该方法已验证,下载地址:http://instantrails.rubyforge.org/svn/trunk/InstantRails-win/InstantRails/mysql/bin/libmySQL.dll 保存到ruby安装目录的bin中。
重新运行rake db:migrate,终于看到了
(in D:/rails/myapp)
== AddInitialData: migrating =================================================
== AddInitialData: migrated (0.2270s) ========================================
== AddUserData: migrating ====================================================
== AddUserData: migrated (0.1280s) ===========================================
== CreateSessions: migrating =================================================
-- create_table(:sessions)
-> 0.0810s
-- add_index(:sessions, :session_id)
-> 0.2780s
-- add_index(:sessions, :updated_at)
-> 0.2270s
== CreateSessions: migrated (0.6020s) ========================================
== CreateAppliances: migrating ===============================================
-- create_table(:appliances)
-> 0.0550s
== CreateAppliances: migrated (0.0590s) ======================================