24、RubyGems与Rails入门指南

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

    1. 访问http://rubyforge.org/frs/?group_id=126 下载最新版本的RubyGems,提供了TGZ、Zip格式的文件,还有用于更新的gem文件和补丁文件。
    2. rubygems-0.9.2.tgz 为例,解压下载的文件。
    3. 使用命令 ruby setup.rb 运行新创建目录中的 setup.rb 程序,可能需要以root用户身份执行。
    4. 输入 gem -v 查看已安装的RubyGems版本。
  • 使用RubyGems

    • 运行 gem 命令不带参数时,会返回基本帮助信息,包含使用说明和更多信息的指引。
    • 常用命令示例:
      • gem -h/--help :显示帮助信息。
      • gem -v/--version :显示版本信息。
      • gem install rake :安装 rake gem。
      • 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。以安装 rails gem为例:

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。例如,更新 rails gem:
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应用

    1. 执行 cd rails_sample_app 进入新创建的目录。
    2. 执行 ruby script/server 启动Rails开发用的内置Web服务器。
    3. 在浏览器中访问http://localhost:3000 ,页面会提供应用设置的有用信息和Rails相关的Web链接。特别需要注意的是,数据库连接信息在 config/database.yml 文件中, script/generate 可用于生成Models和Controllers。
  • 生成应用的基础组件

    • 生成Model
      rails_sample_app 目录中,执行 ruby script/generate model ExchangeRate 生成一个名为 ExchangeRate 的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应用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值