×

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.)

先决条件 (Xiānjué tiáojiàn)

  • 基本的 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ù.)

设置数据库 (Shèzhì shùjùkù)

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ù.)

步骤 (Bùzhòu)
  1. 安装数据库 (Ānzhuāng shùjùkù)

    $ sudo yum install -y postgresql postgresql-server postgresql-devel
  2. 初始化数据库 (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ù.)

  3. 启动数据库 (Qǐdòng shùjùkù)

    $ sudo systemctl start postgresql.service
  4. 数据库运行后,创建您的 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ǎ.)

编写您的应用程序 (Biānxiě nín de yìngyòng chéngxù)

如果您是从头开始 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ù.)

步骤 (Bùzhòu)
  1. 安装 Rails gem (Ānzhuāng Rails gem)

    $ gem install rails
    示例输出 (Shìlì chūchū)
    Successfully installed rails-4.3.0
    1 gem installed
  2. 安装 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
  3. 更改到您的新应用程序目录 (Gǎibiàn dào nín de xīn yìngyòng chéngxù mùlù)

    $ cd rails-app
  4. 如果您已经有应用程序,请确保 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'
  5. 使用所有依赖项生成新的 Gemfile.lock。(Shǐyòng suǒyǒu yìlài xiàng shēngchéng xīn de Gemfile.lock.)

    $ bundle install
  6. 除了使用带有 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>
  7. 创建应用程序的开发和测试数据库。(Chuàngjiàn yìngyòng chéngxù de kāifā hé cèshì shùjùkù.)

    $ rake db:create

    这会在您的 PostgreSQL 服务器中创建 developmenttest 数据库。(Zhè huì zài nín de PostgreSQL fúwùqì zhōng chuàngjiàn developmenttest shùjùkù.)

创建欢迎页面 (Chuàngjiàn huānyíng yèmiàn)

由于 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.)

步骤 (Bùzhòu)
  1. 运行 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.)

  2. 按如下所示编辑 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'
  3. 运行 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 服务配置应用程序 (Wèi AWS shàng de Red Hat OpenShift fúwù pèizhì yìngyòng chéngxù)

为了让您的应用程序与在 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.)

步骤 (Bùzhòu)
  • 使用预定义变量编辑 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"] %>

将您的应用程序存储在 Git 中 (Jiāng nín de yìngyòng chéngxù chǔcūn zài Git zhōng)

在 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。

步骤 (Bùzhòu)
  1. 运行ls -1命令,确保您位于Rails应用程序目录中。该命令的输出应如下所示:

    $ ls -1
    示例输出 (Shìlì chūchū)
    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

将您的应用程序部署到AWS上的Red Hat OpenShift Service

您可以将应用程序部署到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源代码创建一个前端服务,并将其与数据库服务连接。

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

创建数据库服务

步骤 (Bùzhòu)

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

要创建数据库服务,请使用oc new-app命令。您必须向此命令传递一些必要的环境变量,这些变量在数据库容器内使用。这些环境变量是用于设置数据库的用户名、密码和名称。您可以将这些环境变量的值更改为您想要的任何值。变量如下:

  • POSTGRESQL_DATABASE

  • POSTGRESQL_USER

  • POSTGRESQL_PASSWORD

设置这些变量可确保:

  • 存在一个指定名称的数据库。

  • 存在一个指定名称的用户。

  • 用户可以使用指定的密码访问指定的数据库。

步骤 (Bùzhòu)
  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

创建前端服务

要将您的应用程序引入AWS上的Red Hat OpenShift Service,您必须指定应用程序所在的仓库。

步骤 (Bùzhòu)
  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

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

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

    $ oc get dc rails-app -o json

    您应该看到以下部分:

    示例输出 (Shìlì chūchū)
    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. 构建完成后,查看AWS上Red Hat OpenShift Service中正在运行的Pod:

    $ oc get pods

    您应该看到以myapp--开头的行,这就是您的应用程序在AWS上的Red Hat OpenShift Service中运行。

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

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

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

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

        $ RAILS_ENV=production bundle exec rake db:migrate

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

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

为您的应用程序创建路由

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