

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# Rails 应用程序服务器 OpsWorks 堆栈层
<a name="workinglayers-rails"></a>

**重要**  
该 AWS OpsWorks Stacks 服务于 2024 年 5 月 26 日终止，新客户和现有客户均已禁用。我们强烈建议客户尽快将其工作负载迁移到其他解决方案。如果您对迁移有疑问，请通过 re [AWS : Post 或通过 Pre](https://repost.aws/) mium Su [AWS pp](https://aws.amazon.com/support) ort 与 AWS 支持 团队联系。

**注意**  
此层仅适用于基于 Linux 的堆栈。

Rails App Server 层是一个 OpsWorks 堆栈层，它为充当 Rails 应用程序服务器的实例提供蓝图。

**安装**： OpsWorks Stacks 使用实例的软件包安装程序将服务器软件包安装到其默认位置。有关 Apache/Passenger 安装的更多信息，请参阅 [Phusion 乘客](https://www.phusionpassenger.com/)。有关日志记录的更多信息，请参阅 [Log Files](http://httpd.apache.org/docs/2.2/logs.html)。有关 Nginx/Unicorn 安装的更多信息，请参阅 [Unicorn](http://unicorn.bogomips.org/)。

**Add Layer** 页面提供以下配置选项，所有这些选项都是可选的。

**Ruby 版本**  
您的应用程序将使用的 Ruby 版本。默认值为 2.3。  
您还可以通过[覆盖 `[:opsworks][:ruby_version]`](workingcookbook-attributes.md) 属性来指定您的首选 Ruby 版本。  
OpsWorks Stacks 会安装一个单独的 Ruby 软件包，供配方和实例代理使用。有关更多信息，请参阅 [Ruby 版本](workingcookbook-ruby.md)。

**Rails 堆栈**  
默认 Rails 堆栈为包含 [Phusion Passenger](http://httpd.apache.org/) 的 [Apache2](https://www.phusionpassenger.com/)。您还可以使用包含 [Unicorn](http://nginx.org/en/) 的 [Nginx](http://unicorn.bogomips.org/)。  
如果您使用 Nginx 和 Unicorn，则必须将 unicorn gem 添加到您的应用程序的 Gemfile 中，如以下示例中所示：  

```
source 'https://rubygems.org'
gem 'rails', '3.2.15'
...
# Use unicorn as the app server
gem 'unicorn'
...
```

**Passenger 版本**  
如果您已经指定了 Apache2/Passenger，则您必须指定 Passenger 版本。默认值是 5.0.28。

**Rubygems 版本**  
默认 [Rubygems](http://rubygems.org/) 版本是 2.5.1

**安装并托管 Bundler**  
允许您选择是否安装并托管 [Bundler](http://gembundler.com/)。默认值是 **Yes**。

**Bundler 版本**  
默认 Bundler 版本是 1.12.5。

**自定义安全组**  
如果您选择不自动将内置 OpsWorks Stacks 安全组与您的图层关联，则会显示此设置。您必须指定要将哪一安全组与层关联起来。有关更多信息，请参阅 [创建新堆栈](workingstacks-creating.md)。

**Elastic Load Balancer**  
您可以将 Elastic Load Balancing 负载均衡器连接到层的实例。

您可以使用自定义 JSON 或自定义属性文件来修改某些配置设置。有关更多信息，请参阅 [覆盖属性](workingcookbook-attributes.md)。要查看可以覆盖的 Apache、Nginx、Phusion Passenger 和 Unicorn 属性的列表，请参阅[内置说明书属性](attributes-recipes.md)。

**重要**  
如果您的 Ruby on Rails 应用程序使用 SSL，我们建议您尽可能禁用 SSLv3 ，以解决 [CVE-2014-3566](http://www.cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-3566) 中描述的漏洞。有关更多信息，请参阅 [对 Rail SSLv3 s 服务器禁用](#workinglayers-rails-sslv3)。

**Topics**
+ [对 Rail SSLv3 s 服务器禁用](#workinglayers-rails-sslv3)
+ [连接到数据库](#workinglayers-rails-db)
+ [部署 Ruby on Rails 应用程序](#workinglayers-rails-deploy)

## 对 Rail SSLv3 s 服务器禁用
<a name="workinglayers-rails-sslv3"></a>

要禁 SSLv3 用 Rails 服务器，请将该层的 **Ruby 版本**设置更新为 2.1 或更高版本，这将安装 Ruby 2.1.4 或更高版本作为应用程序使用的版本。
+ 将层的 **Ruby Version (Ruby 版本)** 设置更新为 2.1 或更高版本。
+ 为您的 Rails 堆栈更新配置文件，如下所示。

**带 Phusion Passenger 的 Apache**  
更新 Apache 服务器的 `SSLProtocol` 文件中的 `ssl.conf` 设置，如[SSLv3 对于 Apache 服务器禁用](layers-java.md#layers-java-sslv3)中所述。

**带 Unicorn 的 Nginx**  
在 Nginx 服务器的 `ssl_protocols` 文件中添加一个显式 `nginx.conf` 指令。要禁用 SSLv3，请覆盖内置 [nginx 食谱](https://github.com/aws/opsworks-cookbooks/tree/release-chef-11.10/nginx)`nginx.conf.erb`的模板文件，Rails App Server 层的安装配方使用该文件来`nginx.conf`创建，然后添加以下指令：  

```
ssl_protocols TLSv1.2;
```
有关如何配置 `nginx.conf` 的更多信息，请参阅 [Configuring HTTPS servers](http://nginx.org/en/docs/http/configuring_https_servers.html)。有关如何覆盖内置模板的更多信息，请参阅[使用自定义模板](workingcookbook-template-override.md)。

## 连接到数据库
<a name="workinglayers-rails-db"></a>

部署应用程序时， OpsWorks Stacks 会使用来自应用程序[`deploy`属性的](workingcookbook-json.md#workingcookbook-json-deploy)信息创建一个新`database.yml`文件。如果您[将 MySQL 或 Amazon RDS 实例附加](workingapps-creating.md#workingapps-creating-data)到应用程序， OpsWorks Stacks 会将连接信息添加到`deploy`属性中，从而`database.yml`自动包含正确的连接数据。

如果应用程序没有附加数据库，则默认情况下， OpsWorks Stacks 不会向`deploy`属性添加任何连接信息，也不会创建`database.yml`。如果您希望使用不同的数据库，您可以使用自定义 JSON 将数据库属性以及连接信息添加到应用程序的 `deploy` 属性。属性都在下面`["deploy"]["appshortname"]["database"]`，其中*appshortname*是应用程序的短名称， OpsWorks Stacks根据应用程序名称生成该名称。您在自定义 JSON 中指定的值将覆盖任何默认设置。有关更多信息，请参阅 [添加应用程序](workingapps-creating.md)。

OpsWorks 堆栈将以下[`[:...][:database]`](attributes-json-deploy.md#attributes-json-deploy-app-db)属性值合并到。`database.yml`所需的属性取决于特定的数据库，但必须有`host`属性，否则 OpsWorks 堆栈将无法创建`database.yml`。
+ `[:adapter] (String)`-数据库适配器，如 `mysql`。
+ `[:database]`（字符串）-数据库名称。
+ `[:encoding]`（字符串）-编码，这通常被设置为 `utf8`。
+ `[:host]`（字符串）-主机 URL，如 `railsexample.cdlqlk5uwd0k.us-west-2.rds.amazonaws.com`。
+ `[:reconnect]`（布尔值）-如果连接不再存在，应用程序是否重新连接。
+ `[:password]`（字符串）-数据库密码。
+ `[:port]` (数字)。-数据库的端口号。使用此属性覆盖默认端口号，该属性由适配器设置。
+ `[:username]`（字符串）-数据库用户名称。

以下示例显示了其短名称为 *myapp* 的应用程序的自定义 JSON。

```
{
  "deploy" : {
    "myapp" : {
      "database" : {
        "adapter" : "adapter",
        "database" : "databasename",
        "host" : "host",
        "password" : "password",
        "port" : portnumber
        "reconnect" : true/false,
        "username" : "username"
      }
    }
  }
}
```

有关如何指定自定义 JSON 的信息，请参阅[使用自定义 JSON](workingstacks-json.md)。要查看用于创建 `database.yml` (`database.yml.erb`) 的模板，请转至[内置说明书存储库](https://github.com/aws/opsworks-cookbooks/tree/release-chef-11.4/rails/templates/default)。

## 部署 Ruby on Rails 应用程序
<a name="workinglayers-rails-deploy"></a>

您可以在任一受支持的存储库中部署 Ruby on Rails 应用程序。以下内容展示了如何将示例 Ruby on Rails 应用程序部署到运行 R Apache/Passenger ails 堆栈的服务器上。示例代码存储在公共存储 GitHub库中，但其他支持的存储库的基本过程相同。有关如何创建和部署应用程序的更多信息，请参阅[应用程序](workingapps.md)。要查看包含大量注释的示例代码，请转到 [https://github.com/awslabs/opsworks-demo-rails-photo-share-app](https://github.com/awslabs/opsworks-demo-rails-photo-share-app)。

**从 GitHub 存储库部署 Ruby on Rails 应用程序**

1. 使用 Apache/Passenger 作为 Rails [堆栈的 Rails App Server 层创建一个](workingstacks-creating.md)堆栈，向该层[添加一个全天候实例](workinginstances-add.md)，然后[启动它](workinginstances-starting.md)。

1. 当实例处于联机状态后，[将一个应用程序添加](workingapps-creating.md#workingapps-creating-general)到堆栈，并指定以下设置：
   + **Name** - 您喜欢的任何名称；示例中使用的是 `PhotoPoll`。

     OpsWorks Stacks 使用此名称进行显示，并生成一个短名称供内部使用，并在[堆栈配置和部署属性](workingcookbook-json.md)中标识应用程序。例如， PhotoPoll 简称是 photopoll。
   + **App type** - **Ruby on Rails**。
   + ** Rails environment** - 可用的环境由应用程序决定。

     示例应用程序有三个：**development**、**test** 和 **production**。在此示例中，将环境设置为 **development**。查看每个环境的描述的示例代码。
   + **Repository type** -任何受支持的存储库类型。在此示例中指定 `Git`
   + **Repository URL** - 将从其中部署代码的存储库。

     在此示例中，将 URL 设置为 **git://github.com/awslabs/opsworks-demo-rails-photo-share-app**。

   对其余设置使用默认值，然后单击 **Add App** 创建应用程序。

1. [将应用程序部署](workingapps-deploying.md)到 Rails App Server 实例。

1. 部署完成后，转到 **实例** 页面，然后单击 Rails App Server 实例的公有 IP 地址。您将看到以下内容：

![\[Congratulatory message for deploying first app with AWS OpsWorks, with stylized logo.\]](http://docs.aws.amazon.com/zh_cn/opsworks/latest/userguide/images/rails_example.png)
