我---7号斋主人

已婚
爱老婆
I wanna be a happy fish...
显示标签为“ROR”的博文。显示所有博文
显示标签为“ROR”的博文。显示所有博文

星期三, 八月 01, 2007

typo4手动安装

typo4.1.1的安装支持gem install了,另外,我发现用ruby script/server启动不了了,即webrick不支持了?

总之现在用mongrel了,下面是安装和启动步骤:
1,安装typo,并指定路径:
控制台执行:
gem install typo
typo install /var/www/my_typo_site
如果不想通过gem安装,就去rubyforge上下载来,解压缩,一样的。

2,typo数据库初始化
进入typo目录,找到config/database.yml.example,改名为database.yml,修改其中的配置信息;
编辑邮件服务器配置文件,找到config/mail.yml.example,改名为mail.yml,如果是smtp方式,直接修改settings中的信息,如果为sendmail,直接修改method为 :sendmail,并注释其它行即可。
到typo目录下,在控制台运行rake db:migrate,初始化数据库

3,启动typo
到typo安装目录,在控制台运行:
mongrel_rails start -e production -d -a 127.0.0.1 -p 8008

typo live search 中文

typo的live search对中文的支持,假设过typo blog的都知道,直到目前的最新版本4.1.1,还是没有解决,毕竟是老外的系统,没有办法,也许压根这个问题都没有被发现。

但是我们国人使用的时候,就很容易发现了,今天在railscn的坛子里,发现了以为仁兄转的帖子,我照着做了一下,果然有效:
原文:http://www.railscn.com/viewthread.php?tid=1742


另外,typo的官网上,一份邮件中,值得一看:
http://trac.typosphere.org/ticket/560
"...問題出在Ajax的部份,typo在observe時用javascript的escape做了一次unicode的編碼 (%u????)。暫時的解決辦法是在views/shared/_search.rhtml中:
:with => ”’q=’ + escape($F(‘q’))”
改成
:with => ”’q=’ + $F(‘q’)”
就可以避免了。..."
要是再加装其他的theme之后也要把新装的那个theme目录里面的views/shared/_search.rhtml做同样的修改,要不然新的_search.rhtml会把原来的覆盖掉。
然后在进入admin页面,清空cache,再rebuild一次,就可以了。

星期二, 七月 31, 2007

ROR安装再次记之(windows)

windows下安装ror的环境,都知道one-click installer的那个安装文件,就从他开始,下载,安装rubyforge上有,安装的时候,可以将rubygem带着安装上,当然,也可以下载rubygem的包下来,通过ruby setup.rb来安装(在rubygem包解压后的目录下,进入控制台执行)。

此时,ruby -v;gem -v;来看看ruby的版本和gem的版本。

再后来,可以通过下载rails的gem文件并执行gem install railsname.gem来安装,可能会提示缺少几个包,到rubyforge上去搜一下,下来安装一下,即可;另外还可以通过gem install rails - -remote(直接从远程服务器下载Rails安装包文件)和gem install rails - -include-dependencies(首先在本地主机上寻找是否存在Rails的安装包)来安装,命令需要在ruby_home下执行。

星期二, 十月 17, 2006

ror+mysql中文乱码的问题(原)

环境:windows+ror+mysql
客户端:ie,firefox,mysql-front,navicat
-------------
结论:
1、修改database.yml,在连接数据库的设置部分,添加一行设置:

encoding: utf8

2、修改application.rb,添加:
before_filter :set_charset
def set_charset
if request.xhr?
@headers["Content-Type"] = "text/javascript; charset=utf-8"
else
@headers["Content-Type"] = "text/html; charset=utf-8"
end
end

则使用mysql-front访问和页面访问,均无乱码现象。使用navicat作为客户端utf-8编码访问,则中文均为?。

重要:发现之前发的几篇转摘的文章中提到的在environment.rb中添加2行之后,apache可以启动,webrick启动的时候直接就报错。对本地化还在探讨中...

又一篇好文:关于ruby本地化

来源:railscn.com
直接复制了,懒得整理。
传统的做法是用gettext来按locale处理文本,详见Using Gettext To Translate Your Rails Application
一般为了简化编码从页面到代码到数据库统统用utf-8,否则就需要用iconv来转码了。。。

一些标准设置:environment.rb里加

$KCODE = 'u'
require 'jcode'

为了让字符串按utf-8处理。

ApplicationController里加
before_filter :set_charset
def set_charset
if request.xhr?
@headers["Content-Type"] = "text/javascript; charset=utf-8"
else
@headers["Content-Type"] = "text/html; charset=utf-8"
end
end


Robbin问我Time.now的格式怎么办,日期、货币、数字的格式不是简单文本替换了,这个gettext没法处理。看了一下Rails的三个本地化插件,其中Globalize开发较活跃。安装如下
plugin/insall http://svn.globalize-rails.org/svn/globalize/globalize/trunk


或者用配合1.1的开发版本
plugin/install http://svn.globalize-rails.org/svn/globalize/globalize/branches/for-1.1


然后执行
ruby script/generate globalize
来产生migration文件,执行
rake migrate
更新数据库。然后在environment.rb里加上
include Globalize
Locale.set_base_language 'en-US'
Locale.set 'en-US'
也可以换别的编码标准如zh-CN,注意这里locale中间是-不是_。

然后可以用各种格式了:
>>Locale.language
=>English
>>Locale.set 'zh-CN'
=>...
>>Time.now.localize '%d %B %Y'
=>'05 六月 2005' (这个在console里还是乱码,不过在页面上正常)
>>Locale.set 'es-ES' (西班牙)
>>Time.now.loc '%d %B %Y' (localize的简写)
=>'05 Junio 2006'


还有和AR结合的用法,和gettext差不多。更多的内容参考Globalize主页。

关于ror开发中文网站的相关信息,railscn wiki上也有。

关于ror连接mysql中文乱码的问题

懒得整理了,内容中主要涉及ror和mysql连接时,页面中文正常显示,用客户端直接连数据库中文乱码的问题:

Pocky: mysql的编码设置为utf-8,完了之后,数据在页面操作的时候,都正常,可是用数据库客户端去连的时候,这个中文乱码是怎么解决的来着?

chinaonrails: <chf99cn> 你的客户端工具是什么?
<wwpizi> me too 我也有这个问题

Pocky: front啊
我以前曾经设置好了的,可是现在搞不定了。

chinaonrails: <chf99cn> 你从数据库中读出数据是乱码么?

Pocky: 是乱码
ÅçÎâç÷Îâ 这种样子的,不是其他什么编码格式

chinaonrails: <wwpizi> 你把数据库编码设置成 utf-8

Pocky: 我数据库就是utf-8

chinaonrails: <wwpizi> 这样可以保证 你在页面显示是正确的
<chf99cn> 首先在environment.rb里加入 $KCODE = 'U'
<chf99cn> REQUIRE 'jode'
<chf99cn> def configure_charsets
@response.headers["Content-Type"] = "text/html; charset=utf-8"
# Set connection charset. MySQL 4.0 doesn’t support this so it
# will throw an error, MySQL 4.1 needs this
suppress(ActiveRecord::StatementInvalid) do
ActiveRecord::Base.connection.execute 'SET NAMES UTF8'
end
end
<chf99cn> 加在application.rb
<chf99cn> before_filter :configure_charsets

Pocky: 哦,environment没有设。

chinaonrails: <chf99cn> 我的数据库客户端工具是用的Navicat,没有问题

Pocky: 你是不是漏了数据库配置的YML文件,要加个encoding:utf8吧?



下面是转自:http://www.blogjava.net上的一篇文章,还提到中文时间格式的问题。
Ruby on Rails 学习:解决中文乱码问题
初学Rails,简单的做了一个例子,发现存在中文问题。
大致中文问题归类如下:
1、页面无法显示中文,产生中文乱码
2、Mysql数据库采用utf8后,页面采用utf8,数据库保存是乱码,但页面显示正常。
3、时间格式在页面上的中文显示产生乱码。
打开:application.rb:修改代码如下显示:
class ApplicationController < ActionController::Base
before_filter :set_charset
def set_charset
@headers["Content-Type"] = "text/html; charset=utf-8"
end
end

星期一, 十月 16, 2006

Apache+FastCGI+Rails(新)

对于在apache+fastcgi上跑rails的程序,一些新的判断:
1、目前为止的apache最高版本2.2.3,mod_fastcgi.so的最高版本1.3.1,这两个版本是不兼容的,也就是说,在windows上配置,fcgi不工作;
2、使用apache2.0.59与mod_fastcgi.so1.3.1,是可以正常工作的;
3、网上也有以上的指出,并提到了mod_fcgid.so,是可以支持apache2.2.3实现fcgi的,我配置了很久,没有成功,放弃了。

PS:要指出的一件事情是,要将mod_fastcgi.dll改名为libfcgi.dll然后复制到c:\windows\system32中去,同样的配置去配置mod_fcgid.so,我没有尝试过,可以试看看。
在上述的1中,我测试过,将libfcgi.dll(即改名后的mod_fastcgi.dll)删除的话,重启动apache,rails就跑不起来了。

共勉之。

星期二, 十月 10, 2006

fastcgi+apache的重要资料

摘自:
http://wiki.rubyonrails.com/rails/pages/Fast+CGI+and+Apache2+for+Windows+XP

Fast CGI and Apache2 for Windows XP
Home Page | All Pages | Recently Revised | Feed
Rails Prod Win

If you want to get Rails on XP using Apache 2.2 + FastCGI/SCGI support with the MySQL C binding download the Rails Prod Win setup kit and follow the instructions…you should be up and running in no time.
http://sourceforge.net/projects/rails-prod-win/
Other Method (longer…)

This has been a pretty big thorn in my side (and it seems others have gone through the same headaches and all the info out there is just plain wrong, wrong, wrong) and I’ve finally made it work for me, so I thought I’d share.
Things you’ll need

(This is my development machine, though I suspect this should work under different configurations)

* Windows XP SP2
* Apache 2.0.54
* MySQL
* Ruby one-click installer
* FastCGI 2.4.2
* and Ruby for Apache
* Rails 0.13.1

Initial intallation

* Install the basic stuff: Apache, \MySQL, Ruby, gem install rails. Easy.

* Rename mod_fastcgi-2.4.2-AP20.dll to mod_fastcgi.dll (just to make life easy), and copy it to the Apache modules folder (default is c:\programs files\Apache Group\Apache2\modules).

* Install Ruby for Apache. Important: only install mod_fastcgi. Do NOT install mod_ruby or mysql.so because these directions will not work with them.
Note also that the install may complain that it cannot open c:\xppro\system32\msvcp71.dll for writing. Just rename it and retry.

* Create your Rails app. In the console do something like


rails yourappname

Configure Apache

Now you’ll need to configure Apache. Don’t worry, this is easy-easy. Go to your start menu, find the Apache programs group. In there you’ll see a sub-group called something like “Configure Apache Server”. Click on “Edit the Apache httpd.conf Configuration File”

Now you’re looking at a text file with all kinds of confusing stuff, right? Look for a line that looks like


#LoadModule rewrite_module modules/mod_rewrite.so

and change it to


LoadModule rewrite_module modules/mod_rewrite.so


(i.e., uncomment the line)

Then add a new line like this


LoadModule fastcgi_module modules/mod_fastcgi.dll

If you use Apache 1.3.x you also need to make corresponding changes in the AddModule section below the LoadModule section.

Find the line


#AddModule mod_rewrite.c

and uncomment that:


AddModule mod_rewrite.c

Then add a new line:


AddModule mod_fastcgi.c

Now you need to set up a root directory for your application. Look for a line that starts with DocumentRoot and change the path to your Rails application folder.

Next look for a line that starts with Directory and change that path to your Rails application folder (same as above)

(Remember for both paths above to use forward slashes not the normal Windows backslashes)

Almost done with Apache configuration…

(see Fast CGI and Apache2 for Windows without VirtualHosts for an alternative to using VirtualHost directives)

at the bottom of the file add this:



ServerName rails
DocumentRoot "c:/path/to/your/rails/app/public"

Options ExecCGI FollowSymLinks
AllowOverride all
Allow from all
Order allow,deny
AddHandler cgi-script .cgi
AddHandler fastcgi-script .fcgi



(set paths above accordingly)
Configure your Rails app

Go to the public folder in your Rails application and open .htaccess

Look for the rewrite rule:


RewriteRule ^(.*)$ dispatch.cgi [QSA,L]

and change it to:


RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]

Comment out the Apache section in your .htaccess as you’ve already referenced these in your Apache httpd.conf file earlier.

Open dispatch.fcgi and change the first line to


#!c:/ruby/bin/ruby

to accomodate Windows
Add a new host

Last little bit…

Open up your host file (c:\windows\system32\drivers\etc\host)

and add this line:


127.0.0.1 YourRailsAppName

Cool, you’re done

Note from porter.ea:
One additional edit that I found necessary was to add ”#!c:/pathto/rubybin/rubyw” (note the “w”) at the top of the “C:\appname\public\dispatch.fcgi” file.

This was purely a guess on my part based on perusal of the /ruby/bin directory, but it caused my Apache to go from hanging for a long time, then displaying: “Application error Rails application failed to start properly”, to displaying the correct output in better time.
:End Note

Now start Apache, open a browser and type in ”\YourRailsAppName”

you should load the default Welcome to Rails page with blazing \FastCGI speeds.

Like I said easy-easy.
Another Note:

if the Above instructions still do not work for you, please try reversing the slashes:


#!c:\ruby\bin\ruby

It has worked for me.
Additional Notes

1) You might need to add the following line to httpd.conf (particularly on a dev machine)

IfModule mod_fastcgi.c>
FastCgiServer {rails_app_dir}/public/dispatch.fcgi\
-initial-env RAILS_ENV=development \
-processes 3 -idle-timeout 120
/IfModule


This prevents premature timeouts and limits the FASTCgi processes to 3.

2) If using mysql and get ‘uninitialize constant mysql’ error, you may have to copy libmysql.dll to ruby bin (e.g. c:\ruby\bin).

3) Take special care to run your rails-application in “production”-mode. See environment.rb (msc)
Another Note about apache port

If you are on windows, you may probably use the virtual host with a non-80 port (since port 80 used by IIS defaultly). Thus don’t forget add “Listen ${port_number}” in the httpd.conf, otherwise you will never see the rails welcome page.
I forgot this and it wasted a lot of my time to find the problem.
Questions

Does anyone know how I could setup multiple rails apps on the same machine using virtual hosts?

让rails在apache上跑起来

同PHP设置VirtualHost一样,在httpd.conf中添加一段代码。
我的rails项目文件夹为:D:\App_ror\HA\
在此基础上,我的VirtualHost设置如下:

<VirtualHost *:80>
ServerName ha
DocumentRoot "D:/App_ror/HA/public"
AliasMatch ^/([^/]*)(.*) "D:/App_ror/$1/public$2"
<Directory "D:/App_ror/HA/public">
Options ExecCGI FollowSymLinks
AllowOverride all
Allow from all
Order allow,deny
AddHandler cgi-script .cgi
AddHandler fcgid-script .fcgi
</Directory>
</VirtualHost>

接着,修改rails项目本身的一些配置。
1、修改.htaccess,找到
RewriteRule ^(.*)$ dispatch.cgi [QSA,L]

改为
RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]

2、修改C:\WINDOWS\system32\drivers\etc下hosts文件,在
127.0.0.1 localhost

后加一行
127.0.0.1 ha


即可,祝顺,哈哈。

Apache+FastCGI+Rails(原)

刚才发了一篇网摘的关于apache+fastcgi+rails在windows下的配置方法,如下:

Apache+FastCGI+Rails(摘)

按照这个方法配置,必须是针对apache2.0版本的,因为mod_fastcgi.so的当前版本还没有支持apache2.2.x的,所以,如果使用apache2.2.x版本,当启动apache的时候始终是会有“the requested operation has failed!”的对话框。

所以mod_fcgid被我找到了,可以看看有中文的介绍。
mod_fcgid.so下载地址。

对于曾经尝试过配置apache2.2.x+fastcgi的人来说,那么配置起来是一样的。只是名称不同:
1、复制mod_fcgid.so到apache目录\modules下;
2、在httpd.conf中找到
#LoadModule rewrite_module modules/mod_rewrite.so

改成
LoadModule rewrite_module modules/mod_rewrite.so

在后面加一段代码
<ifmodule mod_fcgid.c>
AddHandler fcgid-script .fcgi
</ifmodule>

重启动apache就OK了。

今天在搞这个玩意的时候,还发现一个评价颇高的东西:instantrails,下面有些信息。
评论---wiki---下载

有时间看看。

ror似乎越来越有看头了,只是1个月不到的时间没有去了解相关信息,已经有这么多东西相继出现。

拭目以待...

Apache+FastCGI+Rails(摘)

CSDN上的一篇关于配置rails在Apache+FastCGI得文章,看过很多篇,没有存档,也是因为自己按照文章上讲的没有配置成功,希望这篇有用,存之。
-----------------------------

1 安装Ruby

略…

Ruby的版本要是1.8.2的,Rails 0.13中用到了一些老版本Ruby中没有的特性,所以最好还是用新一点的。我的机器上:C:\>ruby -v : ruby 1.8.2 (2004-12-25) [i386-mswin32]

2 安装rubygems

windows下的ruby installer自带了rubygems,如果安装时没选,到此处下载rubygems

http://rubyforge.org/projects/rubygems/

解压后运行C:\>rubygems-0.8.10\ruby setup.rb,查看是否安装好,C:\>gem -v : 0.8.10

3 安装Rails

C:\>gem install rails --include-dependencies

会安装Rails以及其依赖的其它gem

因为是remote安装,可能会比较慢,也可以先下到本地来安装(http://gems.rubyforge.org/gems/)。命令执行完后,看看装了哪些gem:

C:>gem list

actionmailer (1.0.1)
Service layer for easy email delivery and testing.

actionpack (1.9.1)
Web-flow and rendering framework putting the VC in MVC.

actionwebservice (0.8.1)
Web service support for Action Pack.

activerecord (1.11.1)
Implements the ActiveRecord pattern for ORM.

activesupport (1.1.1)
Support and utility classes used by the Rails framework.

rails (0.13.1)
Web-application framework with template engine, control-flow layer,
and ORM.

rake (0.5.4)
Ruby based make-like utility.

4 安装FastCGI

到此处下载RubyForApache

http://rubyforge.org/projects/rubyforapache

RubyForApache 包含了mod_fastcgi和mod_ruby,我们只需要用到mod_fastcgi。安装时要选好Apache的目录,installer会在选定 的目录/modules下面放入mod_fastcgi,所以如果后面Apache找不到这个模块,就看看是否安装正确了。

5 配置Apache

Apache的安装就不说了,我的版本是2.0.48 。

打开httpd.conf文件,首先是加载一些模块:

LoadModule rewrite_module modules/mod_rewrite.so # <- 重要

LoadModule fastcgi_module modules/mod_fastcgi.so


AddHandler fastcgi-script .fcgi

#下面这句话很重要,设置超时时间,因为rails启动时间比较长,如果太短了,容易超时,导致fastcgi反覆启动ruby进程,根据你的机器配置来设
FastCgiConfig -restart-delay 120 -idle-timeout 150 -appConnTimeout 100 -init-start-delay 100 -startDelay 100

因为我还要用到PHP,所以做了一个Virtual Host

NameVirtualHost *:8080 #端口号根据你自己的改,我的80被IIS占了


ServerName rails
# 随便起的一个名字

#下面设置的是放置你的rails程序的位置,我是放在e:/learnruby目录下的

#下面这句话的是alias所有的形如"/app/controller/action"的路径为实际路径e:/learnruby/app/public/controller/action

#rails应用程序app目录下面的public目录就是给http server用的,alias之后,Apache才能找到rails的dispatch.fcgi文件

AliasMatch ^/([^/]*)(.*) "e:/learnruby/$1/public$2"

#这里需要设置e:/learnruby目录具有ExecCGI FollowSymLinks选项

Options ExecCGI FollowSymLinks
AllowOverride all
Allow from all
Order allow,deny

RewriteEngine on
RewriteLogLevel 0

保存之后重启Apache。

还要再编辑rails应用程序目录下的public/.htaccess文件,假设应用程序的名字为demo(可以用

E:\learnruby>rails demo命令在e:\learnruby下新建一个空的应用)

那么要加入一句话:
RewriteBase /demo

为了能使用fastcgi,还要将RewriteRule ^(.*)$ dispatch.cgi [QSA,L]注释掉,并去掉RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]的注释

最后看起来大概会是这样:

RewriteEngine On
RewriteBase /demo # <- 加入
RewriteRule ^$ index.html [QSA]
RewriteRule ^([^.]+)$ $1.html [QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ dispatch.fcgi [QSA,L] # 修改

6 测试

为了能访问到rails虚拟主机,还要在C:\WINDOWS\system32\drivers\etc\hosts文件中加入

127.0.0.1 rails

打开浏览器,输入你的应用的地址,如http://rails:8080/demo,应该就会出现

Congratulations, you've put Ruby on Rails!。

以后每新建一个rails应用时,只要记得修改public/.htaccess文件就可以了,不用重启Apache服务器了。

星期三, 九月 20, 2006

数组和哈希in ruby

Ruby的数组和哈希是有序集合。两者都保存对象的集合,都可以通过键来访问元素。数组的键是一个整数,而哈希支持任何对象作键。数组和哈希都可以生长以便容纳新的元素,对访问元素来说,数组的效率高,但哈希却更灵活。数组和哈希都可以容纳不同类型的对象,你可以使用数组来包含一个整数、一个字符串和一个浮点数,就像你马上看到的那样。

你可以使用数组的字面值来创建和初始化一个数组---一个方括号括起来的元素集合。有了数组对象,就可以访问单个的数组元素,在方括号中写上一个序号就可以,下面的例子就是这样。

a = [ 1, 'cat', 3.14 ] # 三个元素的数组
# 访问第一个元素
a[0] >> 1
# 设置第三个元素的值
a[2] = nil
# 输出数组的值
a >> [1, "cat", nil]


你可以创建一个空数组,用一个没有元素的数组的字面值,或者用数组对象的构造器,Array.new。
empty1 = []
empty2 = Array.new

有时创建一个字符串的数组会变成一种痛苦,充满了引号和逗号,幸运的是,有一个快捷方式%w帮我们完成。

a = %w{ ant bee cat dog elk }
a[0] >> "ant"
a[3] >> "dog"


Ruby的哈希和数组相似,一个哈希的字面值使用大括号而不是方括号,字面值至少要为每一个条目提供两个对象:一个是键,一个是值。

举例来说,你可能希望把管弦乐团的乐器归类,使用哈希的话就是:

instSection = {
'cello' => 'string',
'clarinet' => 'woodwind',
'drum' => 'percussion',
'oboe' => 'woodwind',
'trumpet' => 'brass',
'violin' => 'string'
}


instSection = {
'大提琴' => '弦乐器',
'单簧管' => '木管乐器',
'鼓' => '打击乐器',
'双簧管' => '木管乐器',
'小号' => '铜管乐器',
'小提琴' => '弦乐器'
}


索引哈希使用和数组一样的方括号。

instSection['oboe'] >> "woodwind"
instSection['cello'] >> "string"
instSection['bassoon'] >> nil


最后这个例子显示出,如果使用一个不存在的键来索引哈希,默认返回nil。正常情况下这是很方便的,因为nil用在条件表达式中就是false。有时你希望改变这种默认值,例如,如果你使用哈希来计算每一个键出现的次数,那么比较方便的情况是默认值为0,在你创建一个新的空的哈希时改变默认值是很容易的。

histogram = Hash.new(0)
histogram['key1'] >> 0
histogram['key1'] = histogram['key1'] + 1
histogram['key1'] >> 1

数组和哈希对象还有许多有用的方法,学习中。

ruby命名规范(简)

Ruby使用一个约定来帮助它区别一个名字的用法:
名字前面的第一个字符表明这个名字的用法,局部变量、方法参数和方法名称应该用一个小写字母开头或者一个下划线;
全局变量用美元符作为前缀($);
而实例变量用@开头;
类变量用两个@开头;
最后,类名、模块名和常量应该大写字母开头。

ruby字符串的表达

ruby中几种字符串的表达:
1、字符串常量:“×××××”,直接使用;
2、字符串变量:如变量表达式strTest,无论作为参数还是变量,都可以通过一般方式:

“this is a String ”+strTest+“;”

或者
“this is a String #{strTest};”

来表达。

如果表达式是一个简单的全局变量、实例或者类变量,那么就不必写出大括号。

星期五, 八月 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

简单的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 应用程序

星期二, 八月 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...