我---7号斋主人

已婚
爱老婆
I wanna be a happy fish...

星期五, 八月 18, 2006

再谈ROR表名与model名

昨天从chinaonrails的gmail群里取来了经(见ROR 表命名规范),可是发现还是会有混乱的现象,如:2张表:biao,biaos,如果用scaffold来生成代码,是一定会有问题的,rails会将两张表的view都方到biaos中去,即使是用set_table_name分别去设置两个model的tablename也只能crud到一张表;至于通过设置environmet.rb来更改表和model的对应规则,也是不行(也许是我愚昧,但是我测试了,是不行,我也很希望能行,如果有人用成功了,请给我留comment)。

于是今天,就“很投入”的来解决这个问题了,结果,几经周折,在参阅了rubyonrails.pdf后,才发现其中的奥妙,用scaffold去生成代码,rails是样遵从自身的命名规范的(如果这个规范可以自定义,也一样,需要统一),如按照rails默认规则:当表名为单数的时候,系统会报error Before updating scaffolding from new DB schema, try creating a table for your model (tablename)的错,当然,网上也有对应的解决办法,就是将表名更改为复数,我没有测试,但是应该是OK的,因为在ruby script/generate model tablename,ruby script/generate controller tablename操作后,即使修改了对应的controller和model,set_table_name :tablename,再执行scaffold也是不行的。最终,我放弃了scaffold,通过ruby script/generate model tablename,ruby script/generate controller tablename之后就可以了,想crud哪张表,就set_table_name :tablename即可,至于index就自己def就好了。

星期四, 八月 17, 2006

ROR 表命名规范

rails框架默认的表命名规范是:
model名为单数,表名为复数。这点很重要。解决问题的办法是通过修改对应model.rb文件,在其中通过set_table_name:tablename定义model对应的表名,但是这样不是太好,会出现混乱的现象,特别是在scaffold的时候,如果是新建项目建议定义好自己model和tablename之间的固定规则,通过如下方法使用自定义规则。
另一种方法,改变这种规则:
修改environment.rb,如设置:


Inflector.inflections do |inflect|
inflect.plural 'admin_user', 'my_admin_user'
end


表示将表名和model名规范为相同。

小错误(追加)

1、今天将rails从1.1.4升级到1.1.6之后,发现webrick启动以前1.1.4建立的项目的时候,启动不了,报错信息提示很清楚,需要修改environment.rb中的RAILS_GEM_VERSION = ''参数,修改成你当前的rails版本就OK了。
2、webrick没有起来,connect(2),小问题,检查你的MySQL是否已经正常启动。
3、error Before updating scaffolding from new DB schema, try creating a table for your model (tablename)这个报错为ROR的表命名规法作怪,将括号中的tablename改成tablenames。

星期三, 八月 16, 2006

雨·困

被雨困,雷电雨交加,只是下班没有及时回家,其实也就是留下来替blog搞了个counter嘛,需要这样惩罚我吗?
好饿啊!
我太善良了,都不忍心叫个外卖来吃,怕别人被淋雨啊。
每天晚上都要为了吃什么而苦恼,F-uck off,恼。

论我乘之南京公交光华门-军区总医院线----
南京的公车哦,在夏天简直是要人命,还好,现在掌握规律了,早上8:00~8:15之间,只要路上不堵,就爽了,人少,可是该死的蓝旗街和御道街那个T字口,经常堵的是害死一堆人,政府,我们可敬的政府,是否可以考虑一下我们穷苦大众的疾苦?那个本来就是上坡,还禁右(公交除外),御道街还是单行,这不要死人吗?那个堵起来,只见大车是一分一分的动,小车是见缝就钻,因此而致使迟到而损失的人均收入该有多少啊。

小民在此呼吁:进行市中心居住区,周边商业区的城市建设理念。

在城市生活,累。
------------
闪电:偶尔;
雷声:无(被Norah Jones优美的歌声盖住了?);
雨:淅沥沥;

冲?不。等,把刚下的《闷锅》copy好的(一个人,与蟑螂为伍的日子,找点乐子)。

明天得打电话联系人去修煤气管了,否则又要耽误事了。争取10天内搬家,可是真不知道能住多久。

冲?好!
雨·困·淋...

简单的WEB应用@ROR

一个简单的基于Ruby on Rails的web应用事例
目的:完成对一张表的增、删、改、查操作。
1、创建一个Rails 应用程序:
在命令行模式下,进入你的工作空间目录,如新建一个目录:rails_app,执行rails sample命令,即生成了sample目录及一些列的文件,这就是我们工程所在的目录。
2、创建数据库:
我们使用MySQL作为我们的后台数据库,可以使用很多工具来操作MySQL数据库,如:EMS、MySQL QueryBrowser、PHPMyAdmin等,在这里,我们使用命令行来直接操作数据库。


cd sample
sample> mysql -u root -p
Enter password: *******
Welcome to the MySQL monitor. Commands end with ; or g.
mysql> create database sample_development;
mysql> create database sample_test;
mysql> create database sample_production;
mysql> grant all on sample_development.* to ‘samleuser’@'localhost’;
mysql> grant all on sample_test.* to ‘samleuser’@'localhost’;
mysql> grant all on sample_production.* to ‘samleuser’@'localhost’;
mysql> exit

我们共创建了三个数据库,并将权限全部分配给了用户samleuser,在此不得不提一下sample\config\database.yml,该文件为rails应用程序的数据库配置文件,可以使用Edit Plus或者Notepad2等工具来编辑,该文件的基本格式为:

development:
adapter: mysql
database: db_development
username: user
password: pwd
host: localhost
encoding: utf8

test:
adapter: mysql
database: db_test
username: user
password: pwd
host: localhost

production:
adapter: mysql
database: db_production
username: user
password: pwd
host: localhost

建三个库的目的很明显了吧?
database.yml 有三个部分,分别是development,test 和production 数据库。使用编辑器修改每个字段以与我们创建的数据库相匹配。注意,在新的database.yml 文件中我们让development 和test 环境下的username 字段为空。这是很方便的,因为它意味着不同的开发者将分别使用自己的username 来连接。但是,我们应该报告一些与MySQL 相关的东西,数据库驱动程序,和操作系统,并让这些字段为空,这样Rails会试着以root 身份连接数据库。如在数据库中没有’root’@’localhost.localdomain’用户,你会得到一个错误,此时在这两个字段放置明确的 username ,上面这三段数据库的设置,只需要另一段生效就可以了,在我们建库的时候,我们将权限是全部分配给一个用户的,如果我们当初是分配给三个用户,那么在此,我们可以通过设置不同的用户和对应数据库,以作不同的访问控制。在此,我们保留development,即:

development,
adapter: mysql
database: db_development
username: samleuser
password:
host: localhost
encoding: utf8
(这个参数可加可不加,我在windows上使用webrick的时候,如果不加,中文无法操作,但是在unix上发布的时候,是没有问题的,也许是当时我在windows上的MySQL字符集设置错了,酌情使用。)

这样表示我们使用db_development这个库。
3、创建数据表
通常在rails的应用中,我们使用脚本来创建数据表,在sample\db\create.sql中加入一下脚本:

drop table if exists products;
create table products (
id int not null auto_increment,
title varchar(100) not null,
description text not null,
image_url varchar(200) not null,
price decimal(10,2) not null,
primary key (id)
);

进入应用实例目录下,在命令行下执行mysql -h localhost -u samleuser -p db_development
4、生成应用代码
进入sample目录,执行:
ruby script/generate scaffold products

或者分步:
ruby script/generate model products
ruby script/generate controller products
rails会创建很多rhtml文件,这些就是rails自动针对products表生成的管理界面了。
5、配置控制器
修改文件..app/controllers/products_controller.rb,如下:

class ContactController < ApplicationController
model :products
scaffold :products
end

6、启动WebRick
webrick为rails自带的web server,执行ruby script/server来启动,执行后,显示:

=> Booting WEBrick…
=> Rails application started on http://0.0.0.0:3000
=> Ctrl-C to shutdown server; call with –help for options
[2006-05-19 11:44:45] INFO WEBrick 1.3.1
[2006-05-19 11:44:45] INFO ruby 1.8.2 (2004-12-25) [i386-mswin32]
[2006-05-19 11:44:45] INFO WEBrick::HTTPServer#start: pid=2672 port=3000

则表示启动正常,打开浏览器,访问http://localhost:3000/products来访问我们建立的针对products的维护。
注意:如果在建立好了一个模块的维护后,如现在的products,发现字段需要调整,那么我们只需要将要添加的字段,添加到建库脚本中,按照以上的步骤,从步骤3开始重复一次,就可以了。

Ruby on Rails(摘)

Ruby on Rails 正在令整个 Web 开发领域受到震憾。让我们首先了解底层的技术:

* Ruby 是一门免费的、简单的、直观的、可扩展的、可移植的、解释的脚本语言,用于快速而简单的面向对象编程。类似于 Perl,它支持处理文本文件和执行系统管理任务的很多特性。
* Rails 是用 Ruby 编写的一款完整的、开放源代码的 Web 框架,目的是使用更简单而且更少的代码编写实际使用的应用程序。

作为一个完整的框架,这意味着 Rails 中的所有的层都是为协同工作而构造的,所以您不必自己再重复,可以完全只使用一门单一的语言。在 Rails 中,所有内容(从模板到控制流再到业务逻辑)都是用 Ruby 编写的。Rails 支持基于配置文件和注释的反射(reflection)和运行时扩展。

本文简单介绍了 Rails 的组成部分,并介绍了它的工作原理。

Rails 介绍

关于 Rails,首先需要理解的是它的模型/视图/控制器(model/view/controller,MVC)架构。虽然这种技术不是 Rails 所特有的 —— 甚至不是 Web 应用程序所特有的(相对于其他程序),但是 Rails 具有非常清晰而专一的 MVC 思维方式。如果您并不使用 MVC 方法,那么 Rails 的用处将大为降低(与遵循其模式的情况相比)。

模型

Rails 应用程序的模型部分主要是它所使用的底层数据库。实际上,在很多情形中 Rails 应用程序正是以一种受管理的方式对关系型数据库管理系统(RDBMS)中的数据执行操作的一个途径。

ActiveRecord 类是 Rails 的一个核心组成部分,它将关系型表映射为 Ruby 对象,使其成为控制器可以操作并能在视图中显示的数据。Rails 应用程序特别倾向于使用广为应用的 MySQL 数据库,不过也有与很多其他 RDBMS 的绑定,比如 IBM® DB2®。

如果您愿意,您可以添加 Ruby 代码来在应用程序模型中执行额外的验证,加强数据关联,或者触发其他操作。应用程序的 app/models/ 目录中的 Ruby 文件能够调用 ActiveRecord 的多种验证方法。不过,您也可以将模型代码留作一个存根,而只是依赖保存数据的 RDBMS 的约束。例如,我在这个示例中所开发的应用程序只包含这个骨架模型代码(至少在开始时是):

清单 1. 骨架模型 app/models/contact.rb

class Contact < ActiveRecord::Base
end
控制器

控制器以其抽象形式执行应用程序的逻辑。也就是说,应用程序的 app/controllers/ 目录中的 Ruby 脚本能把模型数据导入为变量,保存回去,或对其进行修改和处理。不过,控制器不关心用户如何适当地显示或者输入数据。在通常的 MVC 模型中,这可以让用户能够以多种方式与同一控制器进行交互:本地 GUI, Web 界面,以及视力较弱的人使用的语音界面都可以与相同的控制器进行交互。

不过,Rails 不像那样非常通用;相反,它仅局限于在 Web 页中提供和收集数据。虽然如此,但是您可以修改那些 Web 页的布局 —— 颜色、字体、表格、样式表单,等等 —— 与控制器代码无关。

视图

Rails 视图是我们编写 Ruby 代码的地方。Rails 包含有一门用于 .rhtml 的非常好的模板语言,它将纯粹的 HTML 与嵌入的 Ruby 代码组合起来。 Rails 应用程序界面的最表层外观通常是由 CSS 样式表单控制的。.rhtml 格式是一种增强的 HTML。实际上,一个简单的 HTML 文件本身也是一个合法的 RHTML 模板,不过,不应该忽略 RHTML 为您提供的脚本控制。

RHTML 是真正的模板格式 —— 不仅是在 HTML 中嵌入代码的方式 —— 这是一种更为有效的方法。如果您熟悉 PHP,那么可以考虑 PHP 本身与 Smarty 模板之间的对照。也就是说,嵌入的脚本只是将代码与未被解释的 HTML 混合在一起;当需要向客户机输出某些内容时,代码部分仍要负责执行 print 语句。

与之不同的是,模板引擎向 HTML 添加了一组定制的标签,让您能够将条件、循环以及其他逻辑作为增强的 HTML 标记的一部分来表示。

生成代码

Rails 所提供的工具主要是一组代码生成器。相对于那些强迫我使用严格的工作空间和 IDE 的开发环境,我更喜欢这种方法。 Rails 不会妨碍您,但是却会为您省去大部分手工编程的工作 —— 或者,通过提供“可自由获得的”初步(first-pass)支架(scaffolding), 至少帮助您轻松将需要手工编码的工作分为多个部分。

支架 概念是 Rails 中的核心概念。非常简单的应用程序可能完全不用编码,让 Rails 在运行时动态地生成客户机 HTML 页面。 第一遍生成代码时创建的只是粗略的支架;接下来您可以生成更详细的能够定制的控制器、视图和模型。不过在开始时不需要生成太多。

Rails 对其文件的组织是固定的而且非常普通的,不过这种组织相对严格。如果您试图强行使用其他文件和代码组织方式,那么您可能得 付出努力去修改 Rails 环境。再者说,我找不到不使用 Rails 所提供的组织方式的理由;在大部分情况下,它“fits your brain”(Ruby 的 支持者喜欢这样讲)。例如,如果您从头开始设计一个框架(至少如果您以“Ruby 方式”思考),那么这些目录名称及其组织可能与您的选择非常接近。

摘自:使用 Ruby on Rails 快速开发 Web 应用程序

Firefox节约系统资源(转)

摘要:很多朋友在使用Firefox之后,发现其内存消耗量比较大。有什么办法能有效降低Firefox对内存资源的占用呢?

Firefox现在是越来越火,但很多朋友在使用Firefox之后,发现其内存消耗量比较大。以笔者为例,配置了512MB内存的本本,在开了多个页面后,内存占用率就极速上升,即便是之后关闭部分页面,Firefox依旧还是会占用不少内存。那有什么办法能有效降低Firefox对内存资源的占用呢?其实通过配置Firefox的参数,我们完全可以在一定程度上降低Firefox资源占用较大的问题。具体操作步骤如下:

打开Firefox之后,直接在地址栏输入"about:config",回车确认后将打开Firefox参数配置页面。

右键直接单击参数配置页面,然后依次执行"新建"-"布尔",接着为新建的布尔项目命名为"config.trim_on_minimize",同时为其赋值为"True"。主要作用:在最小化时自动释放内存。

在参数配置页面中新建布尔项目,建立的参数项如果有错误,是无法直接在参数配置页面进行删除的,要想删除该错误项的话,只能通过手动修改配置文件--prefs.js来进行(文件位于
C:\Documents and Settings\Administrator\Application
Data\Mozilla\Firefox\Profiles\default文件夹下),直接用记事本打开该文件,随后删除你不需要的参数项就可。

在参数配置页面找到并双击"browser.sessionhistory.max_total_viewers"项,接着其值修改为5或更小。主要作用:页面快进/快退功能中保存的页面总数,默认是-1(无限)。

经过上述修改后,再度使用Firefox时你就会发现,内存资源占用情况将得到大大改善,正在使用Firefox的朋友们不妨试试吧!

星期二, 八月 15, 2006

Ruby on Rails (ROR)安装

ROR已经接触了几周了,可是发现自己除了做了一个小demo去见识了一下ROR的开发效率 之外,全部都是在学习ROR的环境配置及安装,赶紧整理BLOG起来。
PS:我的系统是WIN XP SP2。

一、自动安装
1、需要下载的文件
ruby:可在rubyforge(ruby)下载One-Click Installer - Windows;
2、安装
ruby安装:直接双击步骤1中下载的文件即可安装好ruby,包括环境变量的设置、RubyGems工具等都将妥当;
rails安装:在ruby安装好之后,在windows命令行下执行:
gem install rails -r -y
或者
gem install rails -r --include-dependencies

二、手动安装
1、需要下载的文件
ruby:可在rubyforge(ruby)下载;
rails:可在rubyforge(rails)下载;
rubygem:可在rubyforge(rubygem)下载;
ssleay32.dll下载;
zlib.dll下载;
libeay32.dll下载;
readline.dll下载;
iconv.dll下载;
所有文件下载好后,唯一要做的事,就是记住存放的位置。
2、安装
ruby:解压缩下载好的压缩包,设置环境变量,增加环境变量为RUBY_HOME,对应的值为ruby根目录,如:C:\ruby,修改环境变量PATH,其值的最后增加 ;%RUBY_HOME%\binruby -v,显示版本号,则表示安装设置正确,如:
ruby 1.8.4 (2005-12-24) [i386-mswin32]。
rubygem:把ssleay32.dllzlib.dlllibeay32.dllreadline.dll放在ruby目录\bin下,解压缩下载好的rubygem包,在windows命令行下,进入解压后的目录,执行ruby setup.rb,安装完成后,执行gem -v,查看版本号以检查是否安装完成。
rails:把iconv.dll放在ruby目录\bin下,在windows命令行下执行:
gem install rails -r -y
或者
gem install rails -r --include-dependencies

注意:步骤一、二任选一种即可。建议选择一。

三、测试
在ruby和rails都安装好了之后,检查是否正确安装完成,在windows命令行下执行:
ruby -v 系统显示ruby的版本号;
gem -v 系统显示rubygem的版本号;
rails -v 系统显示rails的版本号;

good luck...

警示

先将mulderrubyonrails.pdflikenote乐道)所引用过的这两句话摆出来,个人也感受深同,勉之!


5."Build, learn, and make mistakes as you go--you'll know more about what you're doing as you're doing it, instead of before you do it."
- Jason Fried, 37 Signals, advocating iterative development
一边做,一边建造、学习和犯错误——对你正在做的事情,你只有做了才会懂得更多,而不是事前空想。
—37Signals的Jason Fried鼓吹反复前进


6. "Traditionally, people think more is better. More may work, but it's painful, expensive, very cold-war. Think about one-downing people, underdoing your competitors."
- Fried coins some new verbs
传统上,人们认为多就是好。多也许能行,但它是费力的和昂贵的,充斥着冷战思维。想想看,可不可以向用户少提供些功能,比竞争对手更简单一点。”
—Fried创造了一些新提法


11. "I like Google the best, they're the cleanest. Others are trying to take your attention away from what you're trying to focus on so it's counter productive to go to those sites."
- Sasha, age 18, explains why it's smart to adapt to your customers instead of forcing them to
adapt to you
“我最喜欢Google,因为他们最干净。其他的网站则试图把你的注意力从你想要关注的东西移开。
去那些网站不会有任何收获。”
—18岁的Sasha指出,适应用户的习惯比起强迫用户去适应你的习惯要聪明得多

详见关于Web 2.0 的20个说法

BLOGGER,搞定了!

blogger虽然还是BETA,但是终于不像以前那样了,连访问都访问不了。
今天是2006/08/15,纪念一下,在chinaonrails的gmail群中激烈的讨论着的时候,我的BLOGGER开版了。
Enjoy...