最近刚学习ruby on rails,配置各种工具都很顺利,我的RoR开发环境:ruby 1.8.6 + rails 1.2.3 + mysql 5.0.18(winxp中文版下), 数据库管理工具Navicat Mysql,之前在网上看到一些关于中文的配置问题,我的mysql的default-character-set=gbk, 但使用Navicat来连接数据库时需配置(高级->把使用MySql字符集项去掉,同时设置编码为65001(UTF-8)),然后创建数据库时字符集选择UTF-8时,这样就一切OK,数据库、页面显示中文都正常了!
昨天我按照Ruby on Rails 快速Web应用开发实战(柳靖等编)中的第四章例子
requrie "rubygems"
requrie_gem "activerecord"
require "pp"
ActiveRecord::Base.establish_connection(
:adapter => "mysql",
:host => "localhost",
:database => "book",
:username => "root",
:password => "11241225",
:port => "3306"
)
class TestAttribute < ActiveRecord::Base
serialize :all_attributes
end
pp TestAttribute.columns.map { |col| col.name }
test_attribute = TestAttribute.new
test_attribute.float_num1 = 1.091239123
pp test_attribute.float_num1.class
test_attribute.float_num2 = 2.546461235
pp test_attribute.float_num2.class
test_attribute.all_attributes = TestAttribute.columns.map { |col| col.name }
pp test_attribute.all_attributes
pp test_attribute.all_attributes.class
pp test_attribute[:float_num1]
pp test_attribute.float_num2
pp test_attribute.float_num2?
注:我的MySql的root用户密码为11241225,我在book数据库中创建了test_attributes表如下:
create table test_attributes (
id int not null auto_increment,
float_num1 float,
float_num2 float,
all_attributes text,
primary key (id)
);
运行时提示如下:D:0:Warning: require_gem is obsolete. Use gem instead.
c:/ruby/lib/ruby/site_ruby/1.8/rubygems.rb:301:in `report_activate_error': Could not find RubyGem ac
tive_record (>= 0.0.0) (Gem::LoadError)
from c:/ruby/lib/ruby/site_ruby/1.8/rubygems.rb:238:in `activate'
from c:/ruby/lib/ruby/site_ruby/1.8/rubygems.rb:76:in `active_gem_with_options'
from c:/ruby/lib/ruby/site_ruby/1.8/rubygems.rb:61:in `require_gem'
from D:/workspace/Ruby/category.rb:2
之后我就把require_gem "activerecord"改成 gem "activerecord"运行提示如下: uninitialized constant ActiveRecord (NameError),我就以这条提示在百度上搜索,进入http://www.iteye.com/post/245813 ,按照robbin所说把gem "activerecord"改成require 'active_record'再次运行结果如下:c:/ruby/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active_record/connection_adapters/mysql_adapt
er.rb:389:in `real_connect': can't convert String into Integer (TypeError)
from c:/ruby/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active_record/connection_adapter
s/mysql_adapter.rb:389:in `connect'
from c:/ruby/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active_record/connection_adapter
s/mysql_adapter.rb:152:in `initialize'
from c:/ruby/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active_record/connection_adapter
s/mysql_adapter.rb:82:in `new'
from c:/ruby/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active_record/connection_adapter
s/mysql_adapter.rb:82:in `mysql_connection'
from c:/ruby/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active_record/connection_adapter
s/abstract/connection_specification.rb:262:in `send'
from c:/ruby/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active_record/connection_adapter
s/abstract/connection_specification.rb:262:in `connection_without_query_cache='
from c:/ruby/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active_record/query_cache.rb:54:
in `connection='
from c:/ruby/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active_record/connection_adapter
s/abstract/connection_specification.rb:230:in `retrieve_connection'
from c:/ruby/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active_record/connection_adapter
s/abstract/connection_specification.rb:78:in `connection'
from c:/ruby/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active_record/base.rb:763:in `co
lumns'
from D:/Thunder/02913/RoR选题方向—源代码/第4章/test.rb:16
想了很久还是没解决,我想很多刚入门的朋友也和我一样,会遇到各种“弱智”的入门级问题,也许对其它的人来说这根本不是个问题,但却让我抓狂,这种学习的积极性打击相当的大,于是我抱着试试看的心态走下了我的第一次求助,回报的方式就是尽我所能帮助其他人!
昨天看了一个源码(C:\ruby\lib\ruby\gems\1.8\gems\activerecord-1.15.3\lib\active_record\connection_adapters\abstract\connection_specification.rb中establish_connection的定义
ActiveRecord::Base.establish_connection(
:adapter => "mysql",
:host => "localhost",
:username => "myuser",
:password => "mypass",
:database => "somedatabase"
)
原来我之前多加了:port选项,我照着这个定义重新编码就成功了,经过这事之后,我学会了自己去查看源码,自己尝试着去解决一些问题!