

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# Rails 應用程式伺服器 OpsWorks 堆疊層
<a name="workinglayers-rails"></a>

**重要**  
 AWS OpsWorks Stacks 此服務已於 2024 年 5 月 26 日終止，並已針對新客戶和現有客戶停用。我們強烈建議客戶盡快將其工作負載遷移至其他解決方案。如果您對遷移有任何疑問，請透過 [AWS re：Post](https://repost.aws/) 或透過 [AWS Premium Support](https://aws.amazon.com/support) 聯絡 AWS 支援 團隊。

**注意**  
此 layer 僅適用於 Linux 類型堆疊。

Rails App Server layer 是 OpsWorks Stacks layer，可為充當 Rails 應用程式伺服器的執行個體提供藍圖。

**Installation**： OpsWorks Stacks 使用執行個體的套件安裝程式，在其預設位置安裝伺服器套件。如需 Apache/Passenger 安裝的詳細資訊，請參閱 [Phusion Passenger](https://www.phusionpassenger.com/)。如需記錄的詳細資訊，請參閱 [Log Files](http://httpd.apache.org/docs/2.2/logs.html)。如需 Nginx/Unicorn 安裝的詳細資訊，請參閱 [Unicorn](http://unicorn.bogomips.org/)。

**Add Layer (新增 Layer)** 頁面提供下列組態選項，而且全部都是選用的。

**Ruby 版本**  
將由您的應用程式使用的 Ruby 版本。預設值為 2.3.  
您也可以[覆寫 `[:opsworks][:ruby_version]`](workingcookbook-attributes.md) 屬性，來指定慣用的 Ruby 版本。  
OpsWorks Stacks 會安裝個別的 Ruby 套件，以供配方和執行個體代理程式使用。如需詳細資訊，請參閱[Ruby 版本](workingcookbook-ruby.md)。

**Rails 堆疊**  
預設 Rails 堆疊是具有 [Phusion Passenger](https://www.phusionpassenger.com/) 的 [Apache2](http://httpd.apache.org/)。您也可以搭配使用 [Nginx](http://nginx.org/en/) 與 [Unicorn](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 安全群組與 layer 建立關聯，則會顯示此設定。您必須指定要和 layer 關聯的安全群組有哪些。如需詳細資訊，請參閱[建立新的堆疊](workingstacks-creating.md)。

**Elastic Load Balancer**  
您可以將 Elastic Load Balancing 負載平衡器連接至 layer 的執行個體。

您可以使用自訂 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) 中所述的漏洞。如需詳細資訊，請參閱[停用 Rails 伺服器的 SSLv3](#workinglayers-rails-sslv3)。

**Topics**
+ [停用 Rails 伺服器的 SSLv3](#workinglayers-rails-sslv3)
+ [連線至資料庫](#workinglayers-rails-db)
+ [部署 Ruby on Rails 應用程式](#workinglayers-rails-deploy)

## 停用 Rails 伺服器的 SSLv3
<a name="workinglayers-rails-sslv3"></a>

若要停用 Rails 伺服器的 SSLv3，請將 layer 的 **Ruby Version (Ruby 版本)** 設定更新為 2.1 或更高版本，這會安裝 Ruby 2.1.4 或更高版本做為應用程式所使用的版本。
+ 將層級的 **Ruby Version (Ruby 版本)** 設定更新為 2.1 或更高版本。
+ 更新 Rails 堆疊的組態檔案，如下所示。

**具有 Phusion Passenger 的 Apache**  
更新 Apache 伺服器 `SSLProtocol` 檔案中的 `ssl.conf` 設定，如[停用 Apache 伺服器的 SSLv3](layers-java.md#layers-java-sslv3) 中所述。

**具有 Unicorn 的 Nginx**  
將明確的 `ssl_protocols` 指示詞新增至 Nginx 伺服器的 `nginx.conf` 檔案。若要停用 SSLv3，請覆寫 Rails App Server layer 用於建立 [的內建 nginx 技術指南](https://github.com/aws/opsworks-cookbooks/tree/release-chef-11.10/nginx)`nginx.conf.erb`範本檔案`nginx.conf`，並新增下列指令：  

```
ssl_protocols TLSv1.2;
```
如需如何設定 `nginx.conf` 的詳細資訊，請參閱[設定 HTTPS 伺服器](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 Stacks 會將下列[`[:...][:database]`](attributes-json-deploy.md#attributes-json-deploy-app-db)屬性值納入 `database.yml`。必要屬性取決於特定資料庫，但您必須具有`host`屬性，否則 OpsWorks Stacks 不會建立 `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 應用程式部署至執行 Apache/Passenger Rails 堆疊的伺服器。範例程式碼會存放在公有 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. [建立](workingstacks-creating.md)具有 Rails App Server layer 的堆疊，並將 Apache/Passenger 作為 Rails 堆疊，[新增全年無休的執行個體](workinginstances-add.md)到 layer，然後[啟動它](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 (Rails 環境)** – 可用的環境是由應用程式所決定。

     範例應用程式有三種：**development**、**test** 及 **production**。針對此範例，請將環境設定為 **development**。如需每個環境的描述，請參閱範例程式碼。
   + **儲存庫類型** – 任何支援的儲存庫類型。在此範例中，指定 `Git`。
   + **Repository URL (儲存庫 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_tw/opsworks/latest/userguide/images/rails_example.png)
