$ sudo yum install -y postgresql postgresql-server postgresql-devel
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 数据库。
安装数据库
$ sudo yum install -y postgresql postgresql-server postgresql-devel
初始化数据库
$ sudo postgresql-setup initdb
此命令创建存储数据的 `/var/lib/pgsql/data` 目录。
启动数据库
$ sudo systemctl start postgresql.service
数据库运行后,创建您的 `rails` 用户
$ sudo -u postgres createuser -s rails
请注意,创建的用户没有密码。
如果您是从头开始 Rails 应用程序,则必须首先安装 Rails gem。然后您可以继续编写您的应用程序。
安装 Rails gem
$ gem install rails
Successfully installed rails-4.3.0
1 gem installed
安装 Rails gem 后,使用 PostgreSQL 作为数据库创建一个新应用程序
$ rails new rails-app --database=postgresql
更改到您的新应用程序目录
$ cd rails-app
如果您已经有应用程序,请确保 `pg`(postgresql)gem 存在于您的 `Gemfile` 中。如果没有,请通过添加 gem 来编辑您的 `Gemfile`
gem 'pg'
使用所有依赖项生成新的 `Gemfile.lock`。
$ bundle install
除了使用带有 `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>
创建应用程序的开发和测试数据库
$ rake db:create
这会在您的 PostgreSQL 服务器中创建 `development` 和 `test` 数据库。
自从 Rails 4 之后,生产环境不再提供静态的public/index.html
页面,您必须创建一个新的根页面。
要拥有一个自定义的欢迎页面,必须执行以下步骤
创建一个带有 index 动作的控制器。
为 welcome 控制器的 index 动作创建一个视图页面。
创建一个路由,使用已创建的控制器和视图来提供应用程序的根页面。
Rails 提供了一个生成器,可以为您完成所有必要的步骤。
运行 Rails 生成器
$ rails generate controller welcome index
所有必要的档案都已创建。
编辑config/routes.rb
文件中的第 2 行,如下所示
root 'welcome#index'
运行 rails 服务器以验证页面是否可用
$ rails server
您应该可以通过在浏览器中访问http://127.0.0.1:3000来查看您的页面。如果您没有看到页面,请检查输出到服务器的日志以进行调试。
要使您的应用程序与在 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"] %>
在 OpenShift Dedicated 中构建应用程序通常需要将源代码存储在 git 存储库中,因此如果您还没有安装git
,则必须安装它。
安装 git。
通过运行ls -1
命令确保您位于 Rails 应用程序目录中。该命令的输出应如下所示
$ ls -1
app
bin
config
config.ru
db
Gemfile
Gemfile.lock
lib
log
public
Rakefile
README.rdoc
test
tmp
vendor
在您的 Rails 应用程序目录中运行以下命令以初始化并将您的代码提交到 git
$ git init
$ git add .
$ git commit -m "initial commit"
提交应用程序后,您必须将其推送到远程存储库。在您创建新存储库的 GitHub 帐户中。
设置指向您的git
存储库的远程地址
$ git remote add origin [email protected]:<namespace/repository-name>.git
将您的应用程序推送到您的远程 git 存储库。
$ git push
您可以将您的应用程序部署到 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
设置这些变量可确保
存在具有指定名称的数据库。
存在具有指定名称的用户。
用户可以使用指定的密码访问指定的数据库。
创建数据库服务
$ 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
要将您的应用程序引入 OpenShift Dedicated,您必须指定应用程序所在的存储库。
创建前端服务并指定在创建数据库服务时设置的数据库相关环境变量
$ 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
。
通过查看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
构建完成后,查看 OpenShift Dedicated 中正在运行的 Pod
$ oc get pods
您应该看到以myapp-
开头的行,那就是您在 OpenShift Dedicated 中运行的应用程序。
在您的应用程序能够正常运行之前,您必须通过运行数据库迁移脚本来初始化数据库。您可以通过两种方式执行此操作
从正在运行的前端容器手动执行
使用rsh
命令进入前端容器
$ oc rsh <frontend_pod_id>
在容器内运行迁移
$ RAILS_ENV=production bundle exec rake db:migrate
如果您在development
或test
环境中运行 Rails 应用程序,则不必指定RAILS_ENV
环境变量。
通过在您的模板中添加预部署生命周期钩子。