$ sudo yum install -y postgresql postgresql-server postgresql-devel
Ruby on Rails 是用 Ruby 编写的 Web 框架。本指南介绍如何在 AWS 上的 Red Hat OpenShift 服务中使用 Rails 4。(Ruby on Rails shì yòng Ruby biānxiě de Web kuàngjià. Běn zhǐnàn jièshào rúhé zài AWS shàng de Red Hat OpenShift fúwù zhōng shǐyòng Rails 4.)
通读整个教程以概述在 AWS 上的 Red Hat OpenShift 服务上运行应用程序所需的所有步骤。如果您遇到问题,请尝试通读整个教程,然后返回您的问题。查看之前的步骤以确保所有步骤都正确运行也很有用。(Tōngdú zhěnggè jiàochéng yǐ gài shuò zài AWS shàng de Red Hat OpenShift fúwù shàng yùnxíng yìngyòng chéngxù suǒxū de suǒyǒu bùzhòu. Rúguǒ nín yùdào wèntí, qǐng chángshì tōngdú zhěnggè jiàochéng, ránhòu fǎnhuí nín de wèntí. Chá kàn zhīqián de bùzhòu yǐ quèbǎo suǒyǒu bùzhòu dōu zhèngquè yùnxíng yě hěn yǒuyòng.) |
基本的 Ruby 和 Rails 知识。(Jīběn de Ruby hé Rails zhīshì.)
本地安装的 Ruby 2.0.0+、Rubygems、Bundler 版本。(Běndì ānzhuāng de Ruby 2.0.0+、Rubygems、Bundler bǎnběn.)
基本的 Git 知识。(Jīběn de Git zhīshì.)
AWS 上运行的 Red Hat OpenShift 服务 4 实例。(AWS shàng yùnxíng de Red Hat OpenShift fúwù 4 shǐlì.)
确保 AWS 上的 Red Hat OpenShift 服务实例正在运行并可用。还要确保您的 oc
CLI 客户端已安装并且该命令可从您的命令行 shell 访问,以便您可以使用它通过您的电子邮件地址和密码登录。(Quèbǎo AWS shàng de Red Hat OpenShift fúwù shǐlì zhèngzài yùnxíng bìng kěyòng. Hái yào quèbǎo nín de oc
CLI kliànhù yǐ ānzhuāng bìng gāi mìnglìng kě cóng nín de mìnglìng xíng shell fǎngwèn, yǐbiàn nín kěyǐ shǐyòng tā tōngguò nín de diànzǐ yóujiàn dìzhǐ hé mìmǎ dēnglù.)
Rails 应用程序几乎总是与数据库一起使用。对于本地开发,请使用 PostgreSQL 数据库。(Rails yìngyòng chéngxù jīhū zǒngshì yǔ shùjùkù yīqǐ shǐyòng. Duìyú běndì kāifā, qǐng shǐyòng PostgreSQL shùjùkù.)
安装数据库 (Ānzhuāng shùjùkù)
$ sudo yum install -y postgresql postgresql-server postgresql-devel
初始化数据库 (Chūshǐhuà shùjùkù)
$ sudo postgresql-setup initdb
此命令创建 /var/lib/pgsql/data
目录,其中存储数据。(Cǐ mìnglìng chuàngjiàn /var/lib/pgsql/data
mùlù, qízhōng chǔcūn shùjù.)
启动数据库 (Qǐdòng shùjùkù)
$ sudo systemctl start postgresql.service
数据库运行后,创建您的 rails
用户。(Shùjùkù yùnxíng hòu, chuàngjiàn nín de rails
yònghù.)
$ sudo -u postgres createuser -s rails
请注意,创建的用户没有密码。(Qǐng zhùyì, chuàngjiàn de yònghù méiyǒu mìmǎ.)
如果您是从头开始 Rails 应用程序,则必须首先安装 Rails gem。然后您可以继续编写您的应用程序。(Rúguǒ nín shì cóng tóu kāishǐ Rails yìngyòng chéngxù, zé bìxū shǒuxiān ānzhuāng Rails gem. Ránhòu nín kěyǐ jìxù biānxiě nín de yìngyòng chéngxù.)
安装 Rails gem (Ānzhuāng Rails gem)
$ gem install rails
Successfully installed rails-4.3.0
1 gem installed
安装 Rails gem 后,使用 PostgreSQL 作为数据库创建一个新应用程序。(Ānzhuāng Rails gem hòu, shǐyòng PostgreSQL zuòwéi shùjùkù chuàngjiàn yīgè xīn yìngyòng chéngxù.)
$ rails new rails-app --database=postgresql
更改到您的新应用程序目录 (Gǎibiàn dào nín de xīn yìngyòng chéngxù mùlù)
$ cd rails-app
如果您已经有应用程序,请确保 pg
(postgresql) gem 存在于您的 Gemfile
中。如果没有,请通过添加 gem 来编辑您的 Gemfile
。(Rúguǒ nín yǐjīng yǒu yìngyòng chéngxù, qǐng quèbǎo pg
(postgresql) gem cúnzài yú nín de Gemfile
zhōng. Rúguǒ méiyǒu, qǐng tōngguò tiānjiā gem lái biānjí nín de Gemfile
.)
gem 'pg'
使用所有依赖项生成新的 Gemfile.lock
。(Shǐyòng suǒyǒu yìlài xiàng shēngchéng xīn de Gemfile.lock
.)
$ bundle install
除了使用带有 pg
gem 的 postgresql
数据库外,还必须确保 config/database.yml
使用 postgresql
适配器。(Chúle shǐyòng dàiyǒu pg
gem de postgresql
shùjùkù wài, hái bìxū quèbǎo config/database.yml
shǐyòng postgresql
shìpèi qì.)
确保您更新了 config/database.yml
文件中的 default
部分,使其如下所示。(Quèbǎo nín gēngxīn le config/database.yml
wénjiàn zhōng de default
bùfèn, shǐ qí rúxià suǒshì.)
default: &default
adapter: postgresql
encoding: unicode
pool: 5
host: localhost
username: rails
password: <password>
创建应用程序的开发和测试数据库。(Chuàngjiàn yìngyòng chéngxù de kāifā hé cèshì shùjùkù.)
$ rake db:create
这会在您的 PostgreSQL 服务器中创建 development
和 test
数据库。(Zhè huì zài nín de PostgreSQL fúwùqì zhōng chuàngjiàn development
hé test
shùjùkù.)
由于 Rails 4 不再在生产环境中提供静态 public/index.html
页面,因此您必须创建一个新的根页面。(Yóuyú Rails 4 bù zài zài shēngchǎn huánjìng zhōng tígōng jìngtài public/index.html
yèmiàn, yīncǐ nín bìxū chuàngjiàn yīgè xīn de gēn yèmiàn.)
要拥有自定义欢迎页面,必须执行以下步骤 (Yào yǒngyǒu zìdìngyì huānyíng yèmiàn, bìxū jìnxíng yǐxià bùzhòu)
创建一个带有索引操作的控制器。(Chuàngjiàn yīgè dàiyǒu sóuyǐn càozùo de kòngzhì qì.)
为欢迎控制器索引操作创建一个视图页面。(Wèi huānyíng kòngzhì qì sóuyǐn càozùo chuàngjiàn yīgè shìtú yèmiàn.)
创建一个路由,该路由使用已创建的控制器和视图提供应用程序的根页面。(Chuàngjiàn yīgè lùyóu, gāi lùyóu shǐyòng yǐ chuàngjiàn de kòngzhì qì hé shìtú tígōng yìngyòng chéngxù de gēn yèmiàn.)
Rails 提供了一个生成器,它可以为您完成所有必要的步骤。(Rails tígōng le yīgè shēngchéng qì, tā kěyǐ wèi nín wánchéng suǒyǒu bìyào de bùzhòu.)
运行 Rails 生成器 (Yùnxíng Rails shēngchéng qì)
$ rails generate controller welcome index
所有必需的文件都已创建。(Suǒyǒu bìxū de wénjiàn dōu yǐ chuàngjiàn.)
按如下所示编辑 config/routes.rb
文件中的第 2 行 (Àn rúxià suǒshì biānjí config/routes.rb
wénjiàn zhōng de dì 2 xíng)
root 'welcome#index'
运行 Rails 服务器以验证页面可用 (Yùnxíng Rails fúwùqì yǐ yànzhèng yèmiàn kěyòng)
$ rails server
您应该可以通过在浏览器中访问 http://127.0.0.1:3000 来查看您的页面。如果您没有看到页面,请检查输出到服务器的日志以进行调试。(Nín yīnggāi kěyǐ tōngguò zài liulanqì zhōng fǎngwèn http://127.0.0.1:3000 lái chá kàn nín de yèmiàn. Rúguǒ nín méiyǒu kàndào yèmiàn, qǐng jiǎnchá chūchū dào fúwùqì de rìzhì yǐ jìnxíng tiáochú.)
为了让您的应用程序与在 AWS 上的 Red Hat OpenShift 服务中运行的 PostgreSQL 数据库服务进行通信,您必须编辑 config/database.yml
中的 default
部分以使用环境变量,您必须在数据库服务创建后定义这些环境变量。(Wèile ràng nín de yìngyòng chéngxù yǔ zài AWS shàng de Red Hat OpenShift fúwù zhōng yùnxíng de PostgreSQL shùjùkù fúwù jìnxíng tōngxìn, nín bìxū biānjí config/database.yml
zhōng de default
bùfèn yǐ shǐyòng huánjìng biànliàng, nín bìxū zài shùjùkù fúwù chuàngjiàn hòu dìngyì zhèxiē huánjìng biànliàng.)
使用预定义变量编辑 config/database.yml
中的 default
部分,如下所示 (Shǐyòng yùdìngyì biànliàng biānjí config/database.yml
zhōng de default
bùfèn, rúxià suǒshì)
config/database
YAML 文件 (Shìlì config/database
YAML wénjiàn)<% 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"] %>
在 AWS 上的 Red Hat OpenShift 服务中构建应用程序通常要求源代码存储在 Git 存储库中,因此如果您还没有安装 git
,则必须安装它。(Zài AWS shàng de Red Hat OpenShift fúwù zhōng gòujiàn yìngyòng chéngxù tōngcháng yāoqiú yuán dàimǎ chǔcūn zài Git cúncūkù zhōng, yīncǐ rúguǒ nín hái méiyǒu ānzhuāng git
, zé bìxū ānzhuāng tā.)
安装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
您可以将应用程序部署到AWS上的Red Hat OpenShift Service。
创建rails-app
项目后,您将自动切换到新的项目命名空间。
将应用程序部署到AWS上的Red Hat OpenShift Service涉及三个步骤:
从AWS上的Red Hat OpenShift Service的PostgreSQL镜像创建一个数据库服务。
从AWS上的Red Hat OpenShift Service的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
要将您的应用程序引入AWS上的Red Hat OpenShift Service,您必须指定应用程序所在的仓库。
创建前端服务并指定在创建数据库服务时设置的数据库相关环境变量:
$ 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
使用此命令,AWS上的Red Hat OpenShift Service将获取源代码,设置构建器,构建您的应用程序镜像,并将新创建的镜像与指定的环境变量一起部署。应用程序名为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
构建完成后,查看AWS上Red Hat OpenShift Service中正在运行的Pod:
$ oc get pods
您应该看到以myapp-
开头的行,这就是您的应用程序在AWS上的Red Hat OpenShift Service中运行。
在您的应用程序可以正常运行之前,您必须通过运行数据库迁移脚本来初始化数据库。您可以通过两种方式执行此操作:
从正在运行的前端容器手动执行
使用rsh
命令进入前端容器:
$ oc rsh <frontend_pod_id>
在容器内运行迁移:
$ RAILS_ENV=production bundle exec rake db:migrate
如果您在development
或test
环境中运行Rails应用程序,则不必指定RAILS_ENV
环境变量。
通过在您的模板中添加预部署生命周期钩子。