×

Ruby on Rails 是用 Ruby 编写的 Web 框架。本指南介绍如何在 OpenShift Dedicated 上使用 Rails 4。

通读整个教程,以概述在 OpenShift Dedicated 上运行应用程序所需的所有步骤。如果您遇到问题,请尝试通读整个教程,然后再回到您的问题。回顾之前的步骤以确保所有步骤都正确执行也很有用。

先决条件

  • 基本的 Ruby 和 Rails 知识。

  • 本地安装的 Ruby 2.0.0+、Rubygems、Bundler 版本。

  • 基本的 Git 知识。

  • 正在运行的 OpenShift Dedicated 4 实例。

  • 确保 OpenShift Dedicated 实例正在运行并可用。还要确保您的 `oc` CLI 客户端已安装并且该命令可从您的命令行 shell 访问,以便您可以使用它通过您的电子邮件地址和密码登录。

设置数据库

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

    请注意,创建的用户没有密码。

编写您的应用程序

如果您是从头开始 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. 如果您已经有应用程序,请确保 `pg`(postgresql)gem 存在于您的 `Gemfile` 中。如果没有,请通过添加 gem 来编辑您的 `Gemfile`

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

    $ bundle install
  6. 除了使用带有 `pg` gem 的 `postgresql` 数据库外,还必须确保 `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 服务器中创建 `development` 和 `test` 数据库。

创建欢迎页面

自从 Rails 4 之后,生产环境不再提供静态的public/index.html页面,您必须创建一个新的根页面。

要拥有一个自定义的欢迎页面,必须执行以下步骤

  • 创建一个带有 index 动作的控制器。

  • 为 welcome 控制器的 index 动作创建一个视图页面。

  • 创建一个路由,使用已创建的控制器和视图来提供应用程序的根页面。

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

步骤
  1. 运行 Rails 生成器

    $ rails generate controller welcome index

    所有必要的档案都已创建。

  2. 编辑config/routes.rb文件中的第 2 行,如下所示

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

    $ rails server

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

为 OpenShift Dedicated 配置应用程序

要使您的应用程序与在 OpenShift Dedicated 中运行的 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.net.cn/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"] %>

将您的应用程序存储在 Git 中

在 OpenShift Dedicated 中构建应用程序通常需要将源代码存储在 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"

    提交应用程序后,您必须将其推送到远程存储库。在您创建新存储库的 GitHub 帐户中。

  3. 设置指向您的git存储库的远程地址

    $ git remote add origin [email protected]:<namespace/repository-name>.git
  4. 将您的应用程序推送到您的远程 git 存储库。

    $ git push

将您的应用程序部署到 OpenShift Dedicated

您可以将您的应用程序部署到 OpenShift Dedicated。

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

在 OpenShift Dedicated 中部署应用程序涉及三个步骤

  • 从 OpenShift Dedicated 的 PostgreSQL 镜像创建数据库服务。

  • 从 OpenShift Dedicated 的 Ruby 2.0 构建器镜像和您的 Ruby on Rails 源代码创建前端服务,这些服务与数据库服务连接。

  • 为您的应用程序创建路由。

创建数据库服务

步骤

您的 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

创建前端服务

要将您的应用程序引入 OpenShift Dedicated,您必须指定应用程序所在的存储库。

步骤
  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

    使用此命令,OpenShift Dedicated 将获取源代码,设置构建器,构建您的应用程序镜像,并将新创建的镜像与指定的环境变量一起部署。应用程序名为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. 构建完成后,查看 OpenShift Dedicated 中正在运行的 Pod

    $ oc get pods

    您应该看到以myapp--开头的行,那就是您在 OpenShift Dedicated 中运行的应用程序。

  5. 在您的应用程序能够正常运行之前,您必须通过运行数据库迁移脚本来初始化数据库。您可以通过两种方式执行此操作

    • 从正在运行的前端容器手动执行

      • 使用rsh命令进入前端容器

        $ oc rsh <frontend_pod_id>
      • 在容器内运行迁移

        $ RAILS_ENV=production bundle exec rake db:migrate

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

    • 通过在您的模板中添加预部署生命周期钩子。

为您的应用程序创建路由

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