12.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 镜像创建数据库服务。
- 从 Red Hat OpenShift Service on AWS 的 Ruby 2.0 构建器镜像和 Ruby on Rails 源代码创建前端服务,这些服务与数据库服务连接。
- 为应用程序创建路由。
12.4.1. 创建数据库服务
流程
您的 Rails 应用程序需要一个正在运行的数据库服务。对于此服务,请使用 PostgreSQL 数据库镜像。
要创建数据库服务,使用 oc new-app
命令。您必须将一些在数据库容器中使用的必要环境变量传递给此命令。设置用户名、密码和数据库名称需要这些环境变量。您可随意更改这些环境变量的值。变量如下:
- POSTGRESQL_DATABASE
- POSTGRESQL_USER
- POSTGRESQL_PASSWORD
设置这些变量可确保:
- 存在具有指定名称的数据库。
- 存在具有指定名称的用户。
- 用户可使用指定密码访问指定数据库。
流程
创建数据库服务:
$ oc new-app postgresql -e POSTGRESQL_DATABASE=db_name -e POSTGRESQL_USER=username -e POSTGRESQL_PASSWORD=password
若也要为数据库管理员设置密码,请将以下内容附加至上一命令中:
-e POSTGRESQL_ADMIN_PASSWORD=admin_pw
监控进度:
$ oc get pods --watch
12.4.2. 创建前端服务
要将应用程序带到 Red Hat OpenShift Service on AWS,您必须指定应用程序所在存储库。
流程
创建前端服务,并指定创建数据库服务时设置的数据库相关环境变量:
$ 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
。通过查看
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" } ],
检查构建流程:
$ oc logs -f build/rails-app-1
构建完成后,查看 Red Hat OpenShift Service on AWS 中运行的 pod:
$ oc get pods
您应该看到以
myapp-<number>-<hash&
gt; 开头的行,这是您在 Red Hat OpenShift Service on AWS 中运行的应用程序。在应用程序正常工作前,您必须运行数据库迁移脚本来初始化数据库。具体可通过两种方式实现:
从正在运行的前端容器手动实现:
使用
rsh
命令执行到前端容器中:$ oc rsh <frontend_pod_id>
从容器内部运行迁移:
$ RAILS_ENV=production bundle exec rake db:migrate
如果在
development
或test
环境中运行 Rails 应用程序,则不必指定RAILS_ENV
环境变量。
- 通过在模板中添加部署前生命周期 hook。
12.4.3. 为您的应用程序创建路由
您可公开服务来为您的应用程序创建路由。