浏览 741 次
|
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (6)
|
|
|---|---|
| 作者 | 正文 |
|
时间:2008-03-18
按<Agile Web Development with Rails.pdf> 的Hello,Rails样例操作,中间破费周折(比俺想象中要曲折),现贴出我的Rails hello World之路供其他初学rails的朋友参考,如有理解不当的地方也请指出:
开发环境: 1. NetBeans 6.0 (JDK 1.6) 2. ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32] 3. Rails 2.0.2 4. DB: SQL Server 2000(sp4) # 未采用generate 脚本工具而是用netbeans调用generate菜单创建Controller # 因已安装SQL Server所以未使用Rails默认支持的My SQL. 步骤都是按<Agile Web Development with Rails>做的不再赘述,下面主要记录遇到的问题和解决方法,从执行 http://localhost:3000/say/hello 开始: a.) error 1: Routing Error no route found to match "/say/hello" with {:method=>:get} 处理方法摘要: 引用 This is because the Mongrel (and WEBrick for that matter) web server is only capable of handling one application at a time. It needs to be restarted when we switch to another application. Since we're letting NetBeans start the server, the only way I know to kill it is to kill the ruby.exe process using the Windows Task Manager. Kill ruby.exe, press F6 to run the project, and browse to http://localhost:3000/say/hello. 处理完后, 报错如下: b.) error 2 Errno::ECONNREFUSED in SayController#hello 不能做任何连接,因为目标机器积极地拒绝它。 - connect(2) RAILS_ROOT: E:/ruby/xx - 背景: a.)Rails提供了很好的My SQL支持,不须做任何配置即可连接. b.)本机未装My SQL,已装了SQL Server 2000 - 配置Rails 连接SQL Server 2000: a.) 配置ruby 支持 SQL Server 2000: a.1) 从http://rubyforge.org/projects/ruby-dbi/下载ruby的DBI包,ruby-dbi.tar.gz, 解压缩以后找到ruby-dbi安装目录下的lib/dbd下的ADO.rb. a.2) 在ruby安装目录: %ruby_home%/lib/ruby/site_ruby/1.8/DBD 下新建一个ADO文件夹,将ADO.rb文件copy至此目录. a.3) 测试ruby 连接SQL Server 库(以下代码任意新建一个.rb文件即可测试): # 连接SQL Server 2000:
require "dbi"
dbh=DBI.connect('DBI:ADO:Provider=SQLOLEDB;Connect Timeout=5;DataSource=localhost;Initial Catalog=pubs;Persist SecurityInfo=True;User ID=sa;Password=;')
sth=dbh.prepare("select * from authors where au_fname like 'S%'")
sth.execute
sth.fetch { |row| p row }
b.) 配置rails 支持SQL Server 2000: b.1) 修改<rails_app_home>/config/environment.rb 增加: require 'win32ole' WIN32OLE.codepage = WIN32OLE::CP_UTF8 - 解释: 引用 sql server 2000中使用的unicode 并非是utf8,ado的默认链接编码都是当前系统设置的code pages相关的。 一般的windows设置都是非unicode的,比如简体中文windows系统下一般都是gb2312, 在rails中database.yml设置encoding: utf8,对于sql server没有任何用处。 为了迫使sql server接受utf8数据,必须修改ado链接的code pages值为utf8,才能让ado部分代码在接受rails传入的utf8数据之后,不做任何额外的处理. 否则的话,ado部分代码会根据当前系统的默认code pages值来处理这里字符数据。 于是在中文windows系统上,从utf8的rails项目中传入的数据,会被当作gb2312编码的数据来传递到sql server2000中,于是sql server2000中存入的数据会成为乱码,也有部分数据在处理过程中出错,导致sql 语句执行出错。比如常见的中文字符右边的单引号会不见的情况。 不设置 WIN32OLE.codepage = WIN32OLE::CP_UTF8,你的整个系统编码配置是这样的 rails(utf8)<-->ado(根据当前系统cp来取得编码,或是gb2312或是其他)<-->sql server 2000 (unicode) 整个系统编码是不一致的. WIN32OLE.codepage = WIN32OLE::CP_UTF8 这句代码就是为了更改cp值.整个系统编码配置是这样的 rails(utf8)<-->ado(utf8)<-->sql server 2000 (unicode) 整个系统编码一至,整个系统中不会再出现任何乱码. b.2) 用UE 修改<rails_app_home>/config/database.yml (注意: 在windows下用netbeans直接编辑database.yml文件会存在编码的问题) development: adapter: sqlserver encoding: utf8 database: pubs username: sa password: host: localhost b.3) 刷新: http://localhost:3000/say/hello 仍然报:Errno::ECONNREFUSED in SayController#hello - 处理: kill the ruby.exe process using the Windows Task Manager 后再启动WEBrick时报: => Booting WEBrick... E:/Program Files/ruby/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record/connection_adapters/abstract/connection_specification.rb:231:in `establish_connection': Please install the sqlserver adapter: `gem install activerecord-sqlserver-adapter` (no such file to load -- active_record/connection_adapters/sqlserver_adapter) (RuntimeError) - 问题很明显:缺少sqlserver_adapter.rb这个文件. - 解决: b.4) 从http://svn.rubyonrails.org/rails/adapters/sqlserver/lib/active_record/connection_adapters/ 下载sqlserver_adapter.rb 然后copy至: <rails_app_home>\lib\ruby\gems\1.8\gems\activerecord-2.0.1\lib\active_record\connection_adapters b.5) 刷新: http://localhost:3000/say/hello => 打印出了: "Hello from Rails". - 有一点疑惑: Hello,Rails样例根本不需要数据库支持,为啥非要为Rails配置好数据库连接才能使用? 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
时间:2008-03-18
可能是rails默认启动会尝试数据库连,记得Rails recipese有一章节专门讲述如何无需访问数据库。
|
|
| 返回顶楼 | |
|
时间:2008-03-19
如果你的程序确实不需要数据库访问,你只想写点HelloWorld之类的Rails应用,那么在environment.rb里去掉AR就可以了
config.frameworks -= [ :active_record] |
|
| 返回顶楼 | |





