3.5. 使用 Ruby on Rails 创建应用程序


Ruby on Rails 是采用 Ruby 编写的 web 框架。本指南涵盖了在 Red Hat OpenShift Service on AWS 上使用 Rails 4。

警告

浏览整个教程,了解在 Red Hat OpenShift Service on AWS 上运行应用程序所需的所有步骤。如果遇到问题,请尝试通读整个教程,然后再回看问题。该教程还可用于审查您之前的步骤,以确保正确运行所有步骤。

3.5.1. 先决条件

  • 具备 Ruby 和 Rails 基础知识。
  • 本地已安装 Ruby 2.0.0+ 版、RubyGems、Bundler。
  • 具备 Git 基础知识。
  • 在 AWS 4 上运行 Red Hat OpenShift Service 实例。
  • 确保 AWS 上的 Red Hat OpenShift Service 实例正在运行且可用。另外还需确保已安装 oc CLI 客户端,且可从命令 shell 访问命令,以便您可以使用您的电子邮件地址和密码通过客户端登录。

3.5.2. 设置数据库

Rails 应用程序几乎总是与数据库一同使用。对于本地开发,请使用 PostgreSQL 数据库。

流程

  1. 安装数据库:

    $ sudo yum install -y postgresql postgresql-server postgresql-devel
  2. 初始化数据库:

    $ sudo postgresql-setup initdb

    这个命令会创建 /var/lib/pgsql/data 目录,数据存储在其中。

  3. 启动数据库:

    $ sudo systemctl start postgresql.service
  4. 数据库运行时,创建 rails 用户:

    $ sudo -u postgres createuser -s rails

    注意,所创建的用户无密码。

3.5.3. 编写应用程序

如果要从头开始启动 Rails 应用程序,必须先安装 Rails gem,然后才可编写应用程序。

流程

  1. 安装 Rails gem:

    $ gem install rails

    输出示例

    Successfully installed rails-4.3.0
    1 gem installed

  2. 安装完 Rails gem 后,使用 PostgreSQL 创建一个新应用程序,作为数据库:

    $ rails new rails-app --database=postgresql
  3. 更改至新应用程序目录:

    $ cd rails-app
  4. 如果您已有应用程序,请确保 Gemfile 中存在 pg (postgresql) gem。如果尚无应用程序,则通过添加 gem 来编辑 Gemfile

    gem 'pg'
  5. 使用所有依赖项生成新的 Gemfile.lock

    $ bundle install
  6. 除了将 postgresql 数据库与 pg gem 结合使用外,您还必须确保 config/database.yml 正在使用 postgresql 适配器。

    请确保更新了 config/database.yml 文件中的 default 部分,如下所示:

    default: &default
      adapter: postgresql
      encoding: unicode
      pool: 5
      host: localhost
      username: rails
      password: <password>
  7. 创建应用程序的开发和测试数据库:

    $ rake db:create

    这会在您的 PostgreSQL 服务器中创建 developmenttest 数据库。

3.5.3.1. 创建欢迎页面

由于 Rails 4 在生产中不再提供静态 public/index.html 页面,您必须创建一个新的 root 页面。

要想具有自定义欢迎页面,必须执行以下步骤:

  • 使用 index 操作创建控制器。
  • 为 welcome 控制器 index 操作创建 view 页面。
  • 使用所创建的 controller 和 view 创建一个提供应用程序 root 页面的路由。

Rails 提供了一个生成器,用于完成您所有必要的步骤。

流程

  1. 运行 Rails 生成器:

    $ rails generate controller welcome index

    已创建所有必要文件。

  2. 按如下方式编辑 config/routes.rb 文件中第 2 行:

    root 'welcome#index'
  3. 运行 rails 服务器以验证页面是否可用:

    $ rails server

    在浏览器中访问 http://localhost:3000 即可查看您的页面。如果没有看到该页面,请检查输出至服务器的日志进行调试。

3.5.3.2. 为 Red Hat OpenShift Service on AWS 配置应用程序

要让您的应用程序与 Red Hat OpenShift Service on AWS 中运行的 PostgreSQL 数据库服务通信,您必须编辑 config/database.yml 中的 default 部分,以便在创建数据库服务时使用环境变量。

流程

  • 使用预定义的变量按照以下方式编辑 config/database.yml 中的 default 部分:

    config/database YAML 文件示例

    <% user = ENV.key?("POSTGRESQL_ADMIN_PASSWORD") ? "root" : ENV["POSTGRESQL_USER"] %>
    <% password = ENV.key?("POSTGRESQL_ADMIN_PASSWORD") ? ENV["POSTGRESQL_ADMIN_PASSWORD"] : ENV["POSTGRESQL_PASSWORD"] %>
    <% db_service = ENV.fetch("DATABASE_SERVICE_NAME","").upcase %>
    
    default: &default
      adapter: postgresql
      encoding: unicode
      # For details on connection pooling, see rails configuration guide
      # http://guides.rubyonrails.org/configuring.html#database-pooling
      pool: <%= ENV["POSTGRESQL_MAX_CONNECTIONS"] || 5 %>
      username: <%= user %>
      password: <%= password %>
      host: <%= ENV["#{db_service}_SERVICE_HOST"] %>
      port: <%= ENV["#{db_service}_SERVICE_PORT"] %>
      database: <%= ENV["POSTGRESQL_DATABASE"] %>

3.5.3.3. 将应用程序存储在 Git 中

在 Red Hat OpenShift Service on AWS 中构建应用程序通常需要将源代码存储在 git 存储库中,因此如果还没有 git,则必须安装 git。

先决条件

  • 安装 git。

流程

  1. 运行 ls -1 命令,确保已在 Rails 应用程序目录中。命令输出应类似于:

    $ ls -1

    输出示例

    app
    bin
    config
    config.ru
    db
    Gemfile
    Gemfile.lock
    lib
    log
    public
    Rakefile
    README.rdoc
    test
    tmp
    vendor

  2. 在 Rails 应用程序目录中运行以下命令,以便初始化代码并将其提交给 git:

    $ git init
    $ git add .
    $ git commit -m "initial commit"

    提交应用程序后,必须将其推送(push)到远程存储库。Github 帐户,您可使用它创建新的存储库。

  3. 设置指向 git 存储库的远程存储库:

    $ git remote add origin git@github.com:<namespace/repository-name>.git
  4. 将应用程序推送(push)到远程 git 存储库。

    $ git push

3.5.4. 将应用程序部署到 Red Hat OpenShift Service on AWS

您可以将应用程序部署到 Red Hat OpenShift Service on AWS。

创建 rails-app 项目后,您将自动切换到新的项目命名空间。

在 Red Hat OpenShift Service on AWS 中部署应用程序涉及三个步骤:

  • 从 Red Hat OpenShift Service on AWS 的 PostgreSQL 镜像创建数据库服务。
  • 从 AWS 的 Ruby 2.0 构建器镜像和 Ruby on Rails 源代码(与数据库服务有线)的 Red Hat OpenShift Service 创建前端服务。
  • 为应用程序创建路由。

3.5.4.1. 创建数据库服务

流程

您的 Rails 应用程序需要一个正在运行的数据库服务。对于此服务,请使用 PostgreSQL 数据库镜像。

要创建数据库服务,使用 oc new-app 命令。您必须将一些在数据库容器中使用的必要环境变量传递给此命令。设置用户名、密码和数据库名称需要这些环境变量。您可随意更改这些环境变量的值。变量如下:

  • POSTGRESQL_DATABASE
  • POSTGRESQL_USER
  • POSTGRESQL_PASSWORD

设置这些变量可确保:

  • 存在具有指定名称的数据库。
  • 存在具有指定名称的用户。
  • 用户可使用指定密码访问指定数据库。

流程

  1. 创建数据库服务:

    $ oc new-app postgresql -e POSTGRESQL_DATABASE=db_name -e POSTGRESQL_USER=username -e POSTGRESQL_PASSWORD=password

    若也要为数据库管理员设置密码,请将以下内容附加至上一命令中:

    -e POSTGRESQL_ADMIN_PASSWORD=admin_pw
  2. 监控进度:

    $ oc get pods --watch

3.5.4.2. 创建前端服务

要将应用程序引入 Red Hat OpenShift Service on AWS,您必须指定应用程序所在存储库。

流程

  1. 创建前端服务,并指定创建数据库服务时设置的数据库相关环境变量:

    $ oc new-app path/to/source/code --name=rails-app -e POSTGRESQL_USER=username -e POSTGRESQL_PASSWORD=password -e POSTGRESQL_DATABASE=db_name -e DATABASE_SERVICE_NAME=postgresql

    通过此命令,Red Hat OpenShift Service on AWS 会获取源代码,设置构建器,构建应用程序镜像,并将新创建的镜像与指定的环境变量一起部署。该应用程序命名为 rails-app

  2. 通过查看 rails-app 部署配置的 JSON 文档来验证环境变量是否已添加:

    $ oc get dc rails-app -o json

    您应看到以下部分:

    输出示例

    env": [
        {
            "name": "POSTGRESQL_USER",
            "value": "username"
        },
        {
            "name": "POSTGRESQL_PASSWORD",
            "value": "password"
        },
        {
            "name": "POSTGRESQL_DATABASE",
            "value": "db_name"
        },
        {
            "name": "DATABASE_SERVICE_NAME",
            "value": "postgresql"
        }
    
    ],

  3. 检查构建流程:

    $ oc logs -f build/rails-app-1
  4. 构建完成后,查看 Red Hat OpenShift Service on AWS 中运行的 pod:

    $ oc get pods

    您应该会看到以 myapp-<number>-<hash& gt; 开头的行,这是您在 Red Hat OpenShift Service on AWS 中运行的应用程序。

  5. 在应用程序正常工作前,您必须运行数据库迁移脚本来初始化数据库。具体可通过两种方式实现:

    • 从正在运行的前端容器手动实现:

      • 使用 rsh 命令执行到前端容器中:

        $ oc rsh <frontend_pod_id>
      • 从容器内部运行迁移:

        $ RAILS_ENV=production bundle exec rake db:migrate

        如果在 developmenttest 环境中运行 Rails 应用程序,则不必指定 RAILS_ENV 环境变量。

    • 通过在模板中添加部署前生命周期 hook。

3.5.4.3. 为您的应用程序创建路由

您可公开服务来为您的应用程序创建路由。

警告

确保您指定的主机名解析为路由器的 IP 地址。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.