Leopard上的Ruby on Rails

Marble’s Mac

Mac OS X系统常见问题解答

Marble’s Mac header image 2


Leopard上的Ruby on Rails

November 30th, 2007 · 15 篇评论

在安装了Leopard的苹果机上,如果仔细检查资源库,你将会看到一个叫做Ruby的文件夹。Ruby是一个完整的OO语言,句法清晰,使用方便。而最新的网站开发技术中,Ruby on Rails受到许多开发者的青睐。对于Mac OS X来说,在10.4.6以前的版本所装的Ruby,与Rails不能很好地结合,而在Leopard上,Ruby和Rails已经在操作系统完好地结合。安装好Leopard系统,Ruby on Rails已经处于待用状态。

作为开发平台,Rails将MVC(Model-View-Controller)紧密地结合起来,其本身的创立源于现实生活中的网站应用,因此更能反映实际需要。Ruby on Rails可以使网站开发非常的迅捷。通常情况下,在使用Ruby on Rails时,苹果机用户会使用MySQL做为数据库。但是,虽然MySQL 5.0已经与Leopard服务器版本结合起来,在非服务器版中却不包含MySQL,而且,到目前为止,MySQL官方网站也没有提供Leopard的MySQL下载。尽管如此,由于Rails支持其它数据库,即使没有MySQL,其它数据库比如SQLite也可以使用,而且可能比MySQL更简单方便。

设置
几乎可以不用什么设置。只要打开终端,输入:

rails 你的新应用名

回车之后rails就会为你建立一串文件夹及若干文件。

从网站执行(deployment)的角度出发,开发人员最好将新的应用直接建立在硬盘资源库下的WebServer文件夹下。这是因为如果网站使用的是Leopard服务器,WebServer文件夹对于集中管理网站文件非常便利。在建立好新应用后,在缺省情况下,Rails里自备的Web服务器所设定的ip地址为0.0.0.0,端口为3000。可以用以下方法启动:

用终端的cd命令直接转到你的新应用名下,然后输入:

script/server

回车后,打开Safari,在地址栏输入: http://0.0.0.0:3000/ 后,就会看到Ruby on Rails的欢迎网页。

一个简单的应用
说一万句话也不如一个简单的应用对初选者所提供的帮助。以下的例子,将利用SQLite3和Ruby on Rail快速建立一个应用。

1。打开终端,输入:

cd /Library/WebServer

回车。

2。输入:

rails mywebapp

回车。这一行命令将在/Library/WebServer下建立一个叫做mywebapp的应用。在mywebapp下的config文件夹里,rails生成了一个叫做database.yml的文件。可以用文本编辑(TextEdit)将它打开。在缺省状态下,该文件设定了开发数据库的路径为db/development.sqlite3。

3。输入:

cd mywebapp

回车。

4。输入:

script/generate migration accounts

回车后,rails在db文件夹下生成了一个migrate文件夹,其内有个叫做001_accounts.rb的Ruby文件。使用Rails,可以不用sql命令来建立table。而使用migration(迁移)的方法所建立的数据库,以后即使更换了数据库软件,将可以方便地把数据库的内容迁移到新的数据库软件中。

5。用文件编辑将db/migrate/001_accounts.rb打开,将其内容如下更改,并存储:

class Accounts < ActiveRecord::Migration

def self.up
create_table :accounts do |table|
table.column :name, :string
table.column :budget, :float
end
end

def self.down
drop_table :accounts
end
end

这实际上就比原文件多了四行,它们规定了所要建立table的数据类型。

6. 在终端下,输入:

rake migrate

回车后,rails将开始迁移,建立了sqlite3数据库并建立了一个叫做accounts的table。

7. 在终端下,输入:

script/generate scaffold account expenses

回车后,rails把数据库的框架与网页界面联系起来。

8。在终端下,输入:

mongrel_rails start -a 127.0.0.1 -p 3001 -c/Library/WebServer/mywebapp

回车后,rails自带的mongrel服务器将启动。当然,这里也可以用: script/server 来启动,但是,上面的命令将服务器与127.0.0.1和端口3001绑缚在一起,而不再是0.0.0.0和端口3000。

9。打开safari,在地址栏输入:http://127.0.0.1:3001/expenses 回车后,你会发现你的应用基本上做好了。试输入几个数据,看看结果。

�� 25.png

Tags: 苹果自带应用 · Mac OS X开发软件 · Leopard操作系统问题



迄今为止15 篇回复↓

  • 1 ash // Nov 30, 2007 at 12:45 am

    use rake db:migrate instead.

  • 2 dy // Nov 30, 2007 at 4:03 am

    谢谢分享!
    最近我的本地服务器出问题了,http://localhost/怎么也打不开了,本来在系统预置的共享里开启web共享就可以使用apache了,可是在终端输入apachectl start却显示CFURLWriteDataAndPropertiesToResource(/System/Library/LaunchDaemons/org.apache.httpd.plist) failed: -10,网上也有人遇到这种情况,好像都没有解决.您知道这是怎么回事吗

  • 3 marblesm // Nov 30, 2007 at 8:33 am

    恩,说得对。rake migrate已经过时了,但是还可以用。

  • 4 marblesm // Nov 30, 2007 at 8:41 am

    回第2贴,应该是apahe已经启动了。 你先试试apachectl stop

  • 5 dy // Dec 2, 2007 at 8:32 pm

    那个问题好了也是不能用apache,不知问题在哪.而且我在终端用su转到root用户可以,用sudo就说密码不正确,奇怪了

  • 6 marblesm // Dec 3, 2007 at 7:02 am

    先修理一下磁盘权限。

  • 7 dy // Dec 3, 2007 at 1:37 pm

    果然有问题,就是看不懂…以前还没遇到过.
    验证“Macintosh HD”的权限
    警告:SUID 文件“System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/MacOS/ARDAgent”已被修改,将不被修复。
    已找到 ACL,但它不是按期望的在“Applications”上。
    已找到 ACL,但它不是按期望的在“Library”上。

  • 8 marblesm // Dec 3, 2007 at 1:45 pm

    一个警告说的是Apple远程桌面的SUID被修改。
    两个错误,应用和资源库上ACL不对。看来你采用的是升级安装。检查ACL的方法,参照此文此文

  • 9 dy // Dec 3, 2007 at 7:20 pm

    不是啊,原来是升级安装的,但是启动太慢就重新安装了。晕了,修复权限后重新启动竟然无法加载桌面,一直处于蓝屏状态,想备份重装都来不及了。郁闷死了

  • 10 marblesm // Dec 3, 2007 at 8:53 pm

    重新启动时按住⌘+v, 注意屏幕显示的内容,记下启动时停在了什么地方,或什么地方开始出现了loop。

  • 11 dy // Dec 3, 2007 at 9:57 pm

    谢谢! 好了,原来是不小心装了APE那个软件.用command+S进入UNIX删除就好了.
    现在唯一的问题就是apache了.
    http://discussions.apple.com/thread.jspa?messageID=5917206

  • 12 Sherlock Asimov // Dec 3, 2007 at 10:29 pm

    the command “rake db:migrate” doesn’t seem to work, I get the following error:

    rake aborted!
    Access denied for user ‘user_name’@'localhost’ to database ‘your_development_database’

    the solution provided by the following page doesn’t work either.
    http://wiki.railsplayground.com/railsplayground/show/How+To+migrate+databases+in+production+environment

    So these lead me to the thought that you may have left out some requirements of this.

  • 13 marblesm // Dec 3, 2007 at 11:54 pm

    Well, sorry, but I did not hide anything. Here is the copy of what has shown on my terminal. I created an app named testThis:

    marbless-macbook-pro-15:testThis marbles2$ script/generate migration accounts
    create db/migrate
    create db/migrate/001_accounts.rb
    marbless-macbook-pro-15:testThis marbles2$ rake db:migrate
    (in /Users/marbles2/testThis)
    == Accounts: migrating ========================================================
    – create_table(:accounts)
    -> 0.0040s
    == Accounts: migrated (0.0042s) ===============================================

    sqlite3 is a serverless database. Therefore, I suspect your config file has been pointing to something else…

  • 14 marblesm // Dec 4, 2007 at 11:46 am

    回12楼,如果你用的是mysql,你需要先用mysqladmin建立schema,然后要修改database.yml。在修改时,要加入user和password。如下:

    development:
    adapter: mysql
    database: expenses_development
    username: root
    password:
    socket: /tmp/mysql.sock

  • 15 Sherlock Asimov // Dec 4, 2007 at 7:47 pm

    多谢指教!

您必须登录方可回复