RubyGems与Rails入门指南
在Web开发领域,Ruby语言凭借其简洁性和灵活性备受开发者青睐。而RubyGems和Rails则是Ruby生态系统中非常重要的两个工具,前者是Ruby的包管理系统,后者是著名的Web开发框架。下面将详细介绍它们的相关知识。
1. CGI脚本与Ruby
在Web开发中,CGI(Common Gateway Interface)脚本可以让Web服务器与外部程序进行交互。使用Ruby编写CGI脚本是一种常见的做法,它可以借助
cgi
库来处理HTTP请求和响应。
例如,通过
cgi.params
可以获取HTTP请求中的参数。同时,
mod_ruby
可以让Apache服务器支持Ruby脚本,
.rhtml
和
.rcss
文件则分别用于嵌入Ruby代码的HTML和CSS文件。在配置Apache服务器时,需要对相关配置文件进行相应设置。
2. RubyGems介绍
好的操作系统都有优秀的包管理系统,如Mac OS X的Software Update、Windows的Windows Update以及GNU/Linux的RPM、YUM、APT等。同样,优秀的编程语言也有类似的工具,Ruby的包管理系统就是RubyGems(http://rubygems.org )。
-
安装RubyGems
- 访问http://rubyforge.org/frs/?group_id=126 下载最新版本的RubyGems,提供了TGZ、Zip格式的文件,还有用于更新的gem文件和补丁文件。
-
以
rubygems-0.9.2.tgz为例,解压下载的文件。 -
使用命令
ruby setup.rb运行新创建目录中的setup.rb程序,可能需要以root用户身份执行。 -
输入
gem -v查看已安装的RubyGems版本。
-
使用RubyGems
-
运行
gem命令不带参数时,会返回基本帮助信息,包含使用说明和更多信息的指引。 -
常用命令示例:
-
gem -h/--help:显示帮助信息。 -
gem -v/--version:显示版本信息。 -
gem install rake:安装rakegem。 -
gem list --local:列出本地已安装的gems。 -
gem build package.gemspec:构建gem包。 -
gem help install:查看install命令的帮助信息。
-
-
运行
-
列出已安装和可安装的Gems
-
gem list --local:查看本地已安装的gems。例如,安装RubyGems后,运行该命令可能会显示sources (0.0.1),该包提供远程gem安装的下载源。 -
gem query --remote:查询可用的远程gems,会输出一个很长的列表。
-
-
安装Gems
使用gem install --remote some_gem_name命令安装单个gem。以安装railsgem为例:
gem install --remote rails
Install required dependency rake? [Yn]
Install required dependency activesupport? [Yn]
Install required dependency activerecord? [Yn]
Install required dependency actionpack? [Yn]
Install required dependency actionmailer? [Yn]
Install required dependency actionwebservice? [Yn]
Successfully installed rails-1.2.2
Successfully installed rake-0.7.1
Successfully installed activesupport-1.4.1
Successfully installed activerecord-1.15.2
Successfully installed actionpack-1.13.2
Successfully installed actionmailer-1.3.2
Successfully installed actionwebservice-1.2.2
Installing ri documentation for rake-0.7.1...
Installing ri documentation for activesupport-1.4.1...
Installing ri documentation for activerecord-1.15.2...
Installing ri documentation for actionpack-1.13.2...
Installing ri documentation for actionmailer-1.3.2...
Installing ri documentation for actionwebservice-1.2.2...
Installing RDoc documentation for rake-0.7.1...
Installing RDoc documentation for activesupport-1.4.1...
Installing RDoc documentation for activerecord-1.15.2...
Installing RDoc documentation for actionpack-1.13.2...
Installing RDoc documentation for actionmailer-1.3.2...
Installing RDoc documentation for actionwebservice-1.2.2...
RubyGems系统会自动安装所需的依赖项。
-
更新Gems
-
先使用
gem outdated查询哪些gems需要更新。 -
再使用
gem update命令更新已安装的gems。例如,更新railsgem:
-
先使用
gem update rails
Updating installed gems...
Bulk updating Gem source index for: http://gems.rubyforge.org
Attempting remote update of rails
Install required dependency activesupport? [Yn]
Install required dependency activerecord? [Yn]
Install required dependency actionpack? [Yn]
Install required dependency actionmailer? [Yn]
Install required dependency actionwebservice? [Yn]
Successfully installed rails-1.2.2
Successfully installed activesupport-1.4.1
Successfully installed activerecord-1.15.2
Successfully installed actionpack-1.13.2
Successfully installed actionmailer-1.3.2
Successfully installed actionwebservice-1.2.2
Installing ri documentation for activesupport-1.4.1...
Installing ri documentation for activerecord-1.15.2...
Installing ri documentation for actionpack-1.13.2...
Installing ri documentation for actionmailer-1.3.2...
Installing ri documentation for actionwebservice-1.2.2...
Installing RDoc documentation for activesupport-1.4.1...
Installing RDoc documentation for activerecord-1.15.2...
Installing RDoc documentation for actionpack-1.13.2...
Installing RDoc documentation for actionmailer-1.3.2...
Installing RDoc documentation for actionwebservice-1.2.2...
Gems: [rails] updated
更新gems后,建议在每个Rails应用目录中执行`rake rails:update`,确保应用文件也能更新以适应gems的变化。
-
深入了解RubyGems
使用gem help和gem help some_specific_command可以获取关于gem命令的详细信息,这些信息会根据本地系统实时更新。
3. Rails概述
Rails是一个开源的Web开发框架,官网(http://rubyonrails.org )称其“优化了程序员的开发体验,提高了可持续的生产力,遵循约定优于配置的原则,让开发者编写优美的代码”,被描述为“不痛苦的Web开发”。
-
Rails的设计理念
Rails遵循Ruby的设计哲学,选择合理的默认行为。只要开发者遵循这些约定,开发工作就会相对轻松。它提供了快捷方式和工具,能快速生成Web应用的骨架,将代码合理地放置在目录结构中,使代码整洁、有序、可复用,从而高效地开发应用。 -
Rails的安装方式
- 使用RubyGems :这是推荐的安装方式,前面已详细介绍。
-
通过操作系统包管理器
:部分操作系统的包管理器(如APT)提供Rails作为可安装的包。例如,在Ubuntu系统上,执行
apt-cache search rails可能会显示相关信息。如果不需要最新版本且想避免安装RubyGems,这种方式比较合适。 - 从源代码安装 :可以访问http://rubyonrails.org/down 下载最新的推荐源代码压缩包进行安装。
- 使用预打包版本 :Windows有Instant Rails(http://instantrails.rubyforge.org ),Mac OS X有Locomotive(http://locomotive.sourceforge.net )。这些预打包软件能让你快速启动Rails开发,但配置可能与默认设置有细微差异,遇到问题时可参考对应软件的官网。
-
数据库支持
Rails需要访问数据库才能正常工作,通常使用MySQL(http://mysql.com ),也可以选择其他数据库。如果通过gems或操作系统包管理器安装Rails,建议安装MySQL,可通过操作系统的包管理器进行安装。预打包的Rails安装程序(如Instant Rails和Locomotive)通常自带预配置的数据库。
4. Rails应用的结构
Rails采用Model-View-Controller(MVC)设计模式,该模式由挪威计算机科学家Trygve Reenskaug在20世纪70年代开发,最初用于传统图形用户界面(GUI),现在在Web开发中非常流行。
| 组件 | 描述 |
|---|---|
| Model | 表示数据,是某种对象,每个实例通常代表数据库表中的一条记录。 |
| View | 是数据的呈现方式,可以是直接展示给用户的界面,也可以是其他类型的输出。 |
| Controller | 是控制器,负责处理请求,查询或操作Model以获取或更新数据,并为View提供所需的信息。 |
例如,在货币转换脚本中,从RSS提要中获取的数据就是Model。这些数据可以以HTML网页、纯文本文件或YAML文件等不同方式呈现,这些不同的呈现方式就是View。而负责从服务器获取数据的部分就是Controller。
5. 生成Rails应用
-
创建Rails应用
使用rails application_name命令创建Rails应用。例如,在合适的工作空间目录中执行rails rails_sample_app,会自动创建大量目录和文件:
$ rails rails_sample_app
create
create app/controllers
create app/helpers
create app/models
create app/views/layouts
(several lines deleted)
create public/javascripts/application.js
create doc/README_FOR_APP
create log/server.log
create log/production.log
create log/development.log
create log/test.log
- `app`目录:包含应用的代码,如Models、Views、Controllers等。
- `doc`目录:包含文档。
- `lib`目录:可放置通用的库文件。
- `log`目录:包含应用的日志文件,分为生产、开发和测试环境。
- `public`目录:包含在浏览器中查看或使用的非Ruby文件,如静态HTML文件、图像、JavaScript文件、CSS样式表等。
- `script`目录:包含开发者或管理员使用的实用小程序。
- `test`目录:包含用于自动化测试应用的文件。
-
查看Rails应用
-
执行
cd rails_sample_app进入新创建的目录。 -
执行
ruby script/server启动Rails开发用的内置Web服务器。 -
在浏览器中访问http://localhost:3000 ,页面会提供应用设置的有用信息和Rails相关的Web链接。特别需要注意的是,数据库连接信息在
config/database.yml文件中,script/generate可用于生成Models和Controllers。
-
执行
-
生成应用的基础组件
-
生成Model
在rails_sample_app目录中,执行ruby script/generate model ExchangeRate生成一个名为ExchangeRate的Model:
-
生成Model
ruby script/generate model ExchangeRate
exists app/models/
exists test/unit/
exists test/fixtures/
create app/models/exchange_rate.rb
create test/unit/exchange_rate_test.rb
create test/fixtures/exchange_rates.yml
create db/migrate
create db/migrate/001_create_exchange_rates.rb
生成的`app/models/exchange_rate.rb`文件内容如下:
class ExchangeRate < ActiveRecord::Base
end
这个Model遵循Rails的命名约定,类名使用驼峰命名法,文件名使用小写字母和下划线分隔。`ExchangeRate`继承自`ActiveRecord::Base`,Active Record提供了对象 - 关系映射(ORM)功能,使类的每个实例代表数据库表中的一条记录,表名通常是类名的复数形式。
- **生成Controller**
执行`ruby script/generate controller server_access rss html ascii yaml`生成一个名为`server_access`的Controller,并指定`rss`、`html`、`ascii`、`yaml`四种View:
ruby script/generate controller server_access rss html ascii yaml
exists app/controllers/
exists app/helpers/
create app/views/server_access
exists test/functional/
create app/controllers/server_access_controller.rb
create test/functional/server_access_controller_test.rb
create app/helpers/server_access_helper.rb
create app/views/server_access/rss.rhtml
create app/views/server_access/html.rhtml
create app/views/server_access/ascii.rhtml
create app/views/server_access/yaml.rhtml
`app/controllers/server_access_controller.rb`文件内容如下:
class ServerAccessController < ApplicationController
def rss
end
def html
end
def ascii
end
def yaml
end
end
当访问http://localhost:3000/server_access 时,可能会出现错误,因为没有指定View。默认情况下,Rails会使用`index` View,但`ServerAccessController`没有`index`方法。而访问http://localhost:3000/server_access/ascii 时,会显示对应View的内容,查看`app/views/server_access/ascii.rhtml`文件:
<h1>ServerAccess#ascii</h1>
<p>Find me in app/views/server_access/ascii.rhtml</p>
该文件包含简单的HTML内容,告知我们Controller名称是类名,View名称是方法名,使用`#`表示实例方法。要开发真正的Rails应用,需要填充这些空类、方法和HTML文件,并连接数据库获取信息。
通过以上步骤,你已经对RubyGems和Rails有了基本的了解,并可以开始创建简单的Rails应用。后续可以进一步深入学习Rails的各种功能和API,开发出更复杂的Web应用。
以下是RubyGems安装和使用的mermaid流程图:
graph LR
A[访问下载页面] --> B[下载RubyGems文件]
B --> C[解压文件]
C --> D[运行setup.rb程序]
D --> E[查看安装版本]
E --> F[使用gem命令]
F --> G{命令类型}
G -->|安装| H[gem install some_gem]
G -->|列出本地| I[gem list --local]
G -->|查询远程| J[gem query --remote]
G -->|更新| K[gem update some_gem]
以下是Rails应用创建和组件生成的mermaid流程图:
graph LR
A[创建Rails应用] --> B[进入应用目录]
B --> C[启动开发服务器]
C --> D[访问应用页面]
B --> E{生成组件}
E -->|Model| F[ruby script/generate model ModelName]
E -->|Controller| G[ruby script/generate controller ControllerName View1 View2 ...]
F --> H[生成Model文件和相关测试文件]
G --> I[生成Controller文件和相关View文件]
RubyGems与Rails入门指南
6. Rails应用开发深入
在初步了解Rails应用的创建和基础组件生成后,接下来深入探讨如何进一步完善和开发Rails应用。
6.1 填充Model内容
之前生成的
ExchangeRate
Model目前只是一个空壳,我们需要为其添加具体的功能。例如,为
ExchangeRate
添加属性和验证规则。打开
app/models/exchange_rate.rb
文件,修改如下:
class ExchangeRate < ActiveRecord::Base
validates :currency_from, presence: true
validates :currency_to, presence: true
validates :rate, numericality: { greater_than: 0 }
end
上述代码为
ExchangeRate
Model添加了验证规则,确保
currency_from
、
currency_to
属性不为空,
rate
属性为大于0的数值。
6.2 完善Controller方法
对于之前生成的
server_access
Controller,其方法目前为空。我们可以为
rss
方法添加一些逻辑,使其返回RSS格式的数据。修改
app/controllers/server_access_controller.rb
文件:
class ServerAccessController < ApplicationController
def rss
@exchange_rates = ExchangeRate.all
respond_to do |format|
format.rss { render layout: false }
end
end
def html
@exchange_rates = ExchangeRate.all
end
def ascii
@exchange_rates = ExchangeRate.all
end
def yaml
@exchange_rates = ExchangeRate.all
respond_to do |format|
format.yaml { render json: @exchange_rates.to_yaml }
end
end
end
在上述代码中,为每个方法添加了查询
ExchangeRate
数据的逻辑,并根据不同的请求格式进行响应。
6.3 优化View文件
以
app/views/server_access/rss.rhtml
文件为例,我们可以为其添加具体的RSS格式内容:
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title>Exchange Rates</title>
<description>Latest exchange rates</description>
<link>http://localhost:3000/server_access/rss</link>
<% @exchange_rates.each do |rate| %>
<item>
<title><%= rate.currency_from %> to <%= rate.currency_to %></title>
<description><%= rate.rate %></description>
<link>http://localhost:3000/server_access/rss</link>
</item>
<% end %>
</channel>
</rss>
这样,当访问
http://localhost:3000/server_access/rss
时,就会返回包含汇率信息的RSS数据。
7. 数据库迁移与数据填充
在Rails应用中,数据库迁移是管理数据库结构变化的重要方式。
7.1 创建数据库迁移文件
之前生成
ExchangeRate
Model时,已经创建了一个数据库迁移文件
db/migrate/001_create_exchange_rates.rb
,内容如下:
class CreateExchangeRates < ActiveRecord::Migration[6.0]
def change
create_table :exchange_rates do |t|
t.string :currency_from
t.string :currency_to
t.decimal :rate
t.timestamps
end
end
end
该文件定义了
exchange_rates
表的结构,包含
currency_from
、
currency_to
、
rate
字段以及自动生成的
created_at
和
updated_at
字段。
7.2 执行数据库迁移
在终端中执行以下命令来创建
exchange_rates
表:
rake db:migrate
执行该命令后,Rails会根据迁移文件的定义在数据库中创建相应的表。
7.3 填充测试数据
为了方便测试应用,我们可以填充一些测试数据。在
db/seeds.rb
文件中添加以下内容:
ExchangeRate.create(currency_from: 'USD', currency_to: 'CNY', rate: 6.5)
ExchangeRate.create(currency_from: 'EUR', currency_to: 'CNY', rate: 7.8)
然后在终端中执行以下命令来填充数据:
rake db:seed
这样,
exchange_rates
表中就会有两条测试数据。
8. 路由配置
Rails的路由配置决定了URL如何映射到Controller的方法。打开
config/routes.rb
文件,我们可以对路由进行配置。
Rails.application.routes.draw do
get 'server_access/rss', to: 'server_access#rss'
get 'server_access/html', to: 'server_access#html'
get 'server_access/ascii', to: 'server_access#ascii'
get 'server_access/yaml', to: 'server_access#yaml'
root to: 'server_access#html'
end
上述代码定义了不同URL与
server_access
Controller方法的映射关系,并将根路径映射到
server_access#html
方法。
9. 错误处理与调试
在开发过程中,难免会遇到各种错误。Rails提供了丰富的错误处理和调试工具。
9.1 错误页面定制
当应用出现错误时,Rails会显示默认的错误页面。我们可以定制错误页面,提高用户体验。在
public
目录下创建
404.html
和
500.html
文件,分别用于处理404和500错误。
9.2 调试技巧
在开发过程中,可以使用
byebug
进行调试。在需要调试的代码行前添加
byebug
,当程序执行到该行时会暂停,方便查看变量的值和程序的执行流程。例如:
class ServerAccessController < ApplicationController
def html
@exchange_rates = ExchangeRate.all
byebug
render 'html'
end
end
10. 部署Rails应用
开发完成后,需要将Rails应用部署到生产环境。常见的部署方式有使用Heroku、AWS等云平台。
10.1 使用Heroku部署
- 注册Heroku账号 :访问https://www.heroku.com 注册账号。
- 安装Heroku CLI :根据官方文档安装Heroku命令行工具。
-
登录Heroku
:在终端中执行
heroku login,按照提示登录账号。 -
创建Heroku应用
:在项目根目录下执行
heroku create,创建一个新的Heroku应用。 -
部署应用
:执行
git push heroku master将代码推送到Heroku。 -
执行数据库迁移
:执行
heroku run rake db:migrate在Heroku上执行数据库迁移。
以下是Rails应用开发流程的mermaid流程图:
graph LR
A[创建Rails应用] --> B[生成Model和Controller]
B --> C[填充Model内容]
C --> D[完善Controller方法]
D --> E[优化View文件]
E --> F[数据库迁移与数据填充]
F --> G[路由配置]
G --> H[错误处理与调试]
H --> I[部署应用]
以下是Rails应用部署到Heroku的步骤列表:
1. 注册Heroku账号
2. 安装Heroku CLI
3. 登录Heroku
4. 创建Heroku应用
5. 部署应用
6. 执行数据库迁移
通过以上步骤,你可以深入了解Rails应用的开发流程,从创建应用到部署上线。不断学习和实践,你将能够开发出功能强大、稳定的Web应用。
超级会员免费看
13

被折叠的 条评论
为什么被折叠?



