一个小型项目,历史数据库是SQL2005,不能更改数据库,所以折腾了一下午,到处查资料,终于成功的让Ruby1.8.7+Rails2.3.4在SQL2005上跑起来了。
安装sqlserver的驱动:gem install activerecord-sqlserver-adapter
安装dbi (0.4.1)后,直接使用ADO来访问SQL Server,提示无法打开ADO驱动,原来是缺少了ADO.rb这个文件,下载DBI的老版本(0.2.*),将lib/dbd_ado/ADO.rb文件拷贝到X:/ruby/lib/ruby/site_ruby/1.8/DBD/ADO/ADO.rb,再次连接数据库仍然提示无法连接,修改database.yml:
development:
adapter: sqlserver
database: database
username: user
password: pwd
host: .\SQLEXPRESS
mode: DBI:ADO
provider: SQLNCLI
注意host那里,不能填localhost,也不能填127.0.0.1,否则无法连接到数据库,不知道为什么。
现在可以正常连接到数据库了,但是查询出来的结果仍然为乱码,在database.yml中设置encoding无效,解决方法为:在environment.rb添加下面代码
require 'win32ole'
WIN32OLE.codepage = WIN32OLE::CP_UTF8
然后一切正常,不知道以后还会不会遇到啥莫名其妙的问题。
PS:Ruby中ADO连接SQLServer的方式已经不再推荐使用,ADO.rb已经年久失修了,貌似有很多问题。
使用ODBC的方式链接SQLServer:
当然第一步要配好ODBC数据源,然后再修改database.yml:
development:
adapter: sqlserver
mode: ODBC
username: urname
password: ***
dsn: urdsn
这时候Rails已经可以成功连接到SQLServer了,但是不能查询数据,查询时会报错:
wrong number of arguments
(2 for 1)
需要修改 ruby\lib\ruby\1.8\delegate.rb 这个文件,
第166行和273行定义的方法需要修改为:
def respond_to?(m, include_private = false) # :nodoc:
return true if super
return @_dc_obj.respond_to?(m, include_private)
end
然后连接数据库查询不会再报错,不过查询出来的中文是GBK编码的,如果放在页面上显示,需要手动转换,比较麻烦。查看ruby\lib\ruby\gems\1.8\gems\activerecord-sqlserver-adapter-2.2.22\lib\active_record\connection_adapters\sqlserver_adapter.rb这个文件,第53行:
value.force_encoding('UTF-8') rescue value
由于force_encoding是Ruby1.9里面新增的方法,所以在1.8下面这行代码始终返回value,而没有进行编码转换,既然知道了查询出来的结果是GBK编码的,那暂时用Iconv强制转换一下好了:
value.force_encoding('UTF-8') rescue Iconv.conv('UTF-8','GBK',value) rescue value
至此查询显示乱码问题搞定,在对数据库进行修改操作和根据用户输入进行查询时,还得手工进行转换,再过几年Ruby社区迁移到1.9平台上后这个问题应该就会消失掉了。
在使用过程中发现activerecord-sqlserver-adapter (2.2.22)的分页有问题,真是多灾多难啊,继续修改上面的那个sqlserver_adapter.rb文件,第467行那一大段修改为:
if options[:limit] and options[:offset]
sql.sub!(/ORDER BY.*$/i, '')
sql.sub!(/SELECT/i,
"SELECT row_number() over( order by #{options[:order]} ) as row_num, \n")
sql.replace("select top #{options[:limit]} * from (#{sql}) as tmp_table1 \n" +
"where row_num > #{options[:offset]}")
end
这种修改只对于SQLServer2005以上版本有效,由于使用了order by,在查询中如果没有指定:order就会报错,继续修改will_paginate的finder.rb,在第80行args << find_options前面加上find_options[:order] ||= primary_key:
WillPaginate::Collection.create(page, per_page, total_entries) do |pager|
count_options = options.except :page, :per_page, :total_entries, :finder
find_options = count_options.except(:count).update(:offset => pager.offset, :limit => pager.per_page)
find_options[:order] ||= primary_key
args << find_options
# @options_from_last_find = nil
pager.replace(send(finder, *args) { |*a| yield(*a) if block_given? })
# magic counting for user convenience:
pager.total_entries = wp_count(count_options, args, finder) unless pager.total_entries
end
至此分页问题解决。sqlserver-adapter的作者目前正致力与解决该驱动和Rails3.0的兼容性,承诺以后会对分页语句进行修改,不知道在哪个版本里面可以解决。
分享到:
相关推荐
它允许开发者使用Ruby代码操作数据库,无需编写SQL语句。 4. **路由(Routing)**:Rails的路由系统将URL请求映射到控制器的行动上,定义了Web应用的导航结构。 5. **Helper方法**:这些辅助方法在视图层提供便利...
4. **ActiveRecord**:这是Rails的ORM(对象关系映射)层,它允许开发者使用Ruby来操作数据库,而无需编写SQL。Rails 3.2的ActiveRecord引入了更好的查询接口,如`#pluck`和`#exists?`,以及更强大的事务处理能力。 ...
描述中的 "ruby and rails 的框架rails-2.3.3.zip" 提到的是 Rails 的另一个版本 2.3.3,尽管与标题中的版本号不完全匹配,但我们可以推断这是关于 Rails 2.3.x 系列的讨论。这个压缩包很可能包含了 Rails 框架的源...
版本>2.0 100%适用于Ruby 2.3 +,Rails 5和Rails 6(2.3.1要求> = Rails 6,Rails 5使用2.2.1)。 至于其他版本的RoR,请使用1.6版的gem。 Travis CI上还运行着自动化测试。 支持:PostgreSQL,MySQL,SQLite。 不...
您可以将此版本的~> 0.2与Ruby 2.2、2.3和/或Rails 4.0、4.1一起使用 用法 Post.first.to_sql 为了方便,干净地使用自定义字符串,您可以使用内置优化功能: using PpSql::ToSqlBeautifyRefinement 或者如果您需要...
This book covers Postgres 9.5, Rails 5, and Ruby 2.3. You should have some experience with basic Rails concepts and a cursory understanding of JavaScript, CSS, and SQL, but by no means need to be an ...
2.3 在Mac OS X系统上安装Ruby on Rails 2.3.1 Mac OS X 10.5(Leopard) 2.3.2 Mac OS X 10.4(Tiger)和更早的版本 2.4 在Linux系统上安装Ruby on Rails 2.4.1 使用包管理器 2.4.2 先决条件 ...
2.3 在Mac OS X系统上安装Ruby on Rails 2.3.1 Mac OS X 10.5(Leopard) 2.3.2 Mac OS X 10.4(Tiger)和更早的版本 2.4 在Linux系统上安装Ruby on Rails 2.4.1 使用包管理器 2.4.2 先决条件 ...
2.3 在Mac OS X系统上安装Ruby on Rails 2.3.1 Mac OS X 10.5(Leopard) 2.3.2 Mac OS X 10.4(Tiger)和更早的版本 2.4 在Linux系统上安装Ruby on Rails 2.4.1 使用包管理器 2.4.2 先决条件 ...
本书《敏捷Web开发之Rails应用详解》第三版主要介绍了如何使用Ruby on Rails框架来进行敏捷Web开发。Rails是一个用Ruby语言编写的开源Web应用框架,它遵循MVC(Model-View-Controller)架构模式,并且强调代码的简洁...
使用这个库,Rails 2.3开发者可以利用`ActiveSupport::Notifications`来收集应用的运行时信息,帮助优化性能、调试问题,并且更好地理解代码的运行情况。总的来说,`activesupport_notifications_backport`是向旧...
2.3 Action Pack:视图与控制器 13 第3章 安装Rails 15 3.1 购物清单 15 3.2 Windows上的安装 15 3.3 Mac OS X上的安装 17 3.4 Linux上的安装 17 3.5 选择Rails版本 18 3.6 开发环境 19 3.7 Rails和数据库 22 3.8 ...
### CentOS6.2安装Redmine2.3详细步骤解析 #### 一、环境准备与依赖安装 在开始安装Redmine之前,确保您的CentOS 6.2系统已经更新到最新状态,并安装了必要的依赖包。 **第1步:安装支持插件和其他插件** 执行...
2.3 小结 34 第3章 NoSQL接口与交互 36 3.1 没了SQL还剩什么 36 3.1.1 存储和访问数据 37 3.1.2 MongoDB数据存储与访问 37 3.1.3 MongoDB数据查询 41 3.1.4 Redis数据存储与访问 43 3.1.5 Redis数据查询 47 ...
1.9.3 Starter Toolkit for DB2 on Rails.............................................................................17 1.9.4 Web 2.0 Starter Toolkit for DB2 ..............................................
4.2 Active Record:深入学习数据库操作,包括ActiveRecord的使用,模型关系(association)和查询语言(SQL)。 4.3 Views与模板:学习ERB模板语言,掌握视图的创建与渲染,以及局部变量和助手方法的使用。 4.4 ...
- **SQL Server**:覆盖SQL Server的基础知识和高级特性,适合不同水平的学习者。 - **Oracle**:提供Oracle数据库的管理与开发学习资料。 #### 2.4 Web开发技术 - **HTML/xHTML** 和 **CSS**:介绍网页布局和样式...