

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

# 使用 Elastic Beanstalk Ruby 平台
<a name="create_deploy_Ruby.container"></a>

本主題說明如何在 Elastic Beanstalk 上設定、建置和執行 Ruby 應用程式。

AWS Elastic Beanstalk 支援多個不同版本的 Ruby 程式設計語言平台分支。如需完整清單，請參閱 *AWS Elastic Beanstalk 平台文件中的* [Ruby](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.ruby)。

Ruby Web 應用程式可以在 Puma 應用程式伺服器下的 NGINX 代理伺服器後方執行。如果您使用 RubyGems，您可以在原始碼套件[`Gemfile`](ruby-platform-gemfile.md)中包含 ，以在部署期間安裝套件。

**應用程式伺服器組態**  
Elastic Beanstalk 會根據您在建立環境時選擇的 Ruby 平台分支安裝 Puma 應用程式伺服器。如需 Ruby 平台版本提供之元件的詳細資訊，請參閱*AWS Elastic Beanstalk 平台*指南中的[支援的平台](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.ruby)。

您可以使用自己提供的 Puma 伺服器設定您的應用程序。這提供了一個選項，以使用 Ruby 平台分支預先安裝的 Puma 其他版本。您也可以將應用程式設定為使用不同的應用程式伺服器，例如 Passenger。若要這麼做，您必須在您的部署中包含並自訂 `Gemfile`。您還需要設定 `Procfile` 以啟動應用程式伺服器。如需更多詳細資訊，請參閱*[使用 Procfile 設定應用程式程序](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/ruby-platform-procfile.html)**。*

**其他組態選項**  
Elastic Beanstalk 提供[組態選項](command-options.md)，可讓您用來自訂在 Elastic Beanstalk 環境中 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體上執行的軟體。您可以設定應用程式所需的環境變數，啟用至 Amazon S3 的日誌輪換，並在應用程式來源中，將包含靜態檔案的資料夾映射到代理伺服器提供的路徑。平台也會預先定義與 Rails 和 Rack 相關的部分常見環境變數，方便探索及使用。

Elastic Beanstalk 主控台中提供了[修改正在執行環境組態](environment-configuration-methods-after.md)的組態選項。要避免在終止環境的組態時遺失組態，您可以使用[已儲存組態](environment-configuration-savedconfig.md)來儲存您的設定，並在之後套用至另一個環境。

若要將設定儲存於原始程式碼，您可以包含[組態檔案](ebextensions.md)。每次您建立環境或部署應用程式，組態檔案裡的設定就會套用。您也可以使用組態檔案來安裝套件、執行指令碼，並在部署期間執行其他執行個體自訂操作。

在 Elastic Beanstalk 主控台中套用的設定會覆寫組態檔案中相同的設定 (如存在)。這可讓您在組態檔案中擁有預設設定，並以主控台的環境專屬設定覆寫之。如需優先順序以及其他變更設定方法的詳細資訊，請參閱[組態選項](command-options.md)。

如需各種擴充 Elastic Beanstalk Linux 類型平台方式的詳細資訊，請參閱 [擴充 Elastic Beanstalk Linux 平台](platforms-linux-extend.md)。

## 設定您的 Ruby 環境
<a name="create-deploy_Ruby.container.CON"></a>

您可以使用 Elastic Beanstalk 主控台來啟用至 Amazon S3 的日誌輪換，和設定您應用程式可從環境讀取的變數。

**欲存取環境的軟體組態設定**

1. 開啟 [Elastic Beanstalk 主控台](https://console.aws.amazon.com/elasticbeanstalk)，然後在**區域**清單中選取您的 AWS 區域。

1. 在導覽窗格中，選擇**環境**，然後在清單中選擇您環境的名稱。

1. 在導覽窗格中，選擇**組態**。

1. 在**更新、監控和日誌記錄**組態類別中，選擇**編輯**。

### 日誌選項
<a name="create_deploy_Ruby.container.console.logoptions"></a>

**Log options (日誌選項)** 區段有兩個設定：
+ **Instance profile (執行個體描述檔)** – 指定執行個體描述檔，此描述檔具備存取和您應用程式相關聯 Amazon S3 儲存貯體的許可。
+ **Enable log file rotation to Amazon S3** (啟用 Amazon S3 的日誌檔案輪換) – 指定是否將應用程式 Amazon EC2 執行個體的日誌檔案複製到與應用程式關聯的 Amazon S3 儲存貯體。

### 靜態檔案
<a name="create_deploy_Ruby.container.console.staticfiles"></a>

為改善效能，您可以使用 **Static files** (靜態檔案) 區段來設定代理伺服器，以為來自 Web 應用程式一組目錄中的靜態檔案 (例如 HTML 或影像) 提供服務。對於每個目錄，您可以設定目錄映射的虛擬路徑。代理伺服器收到位於指定路徑下的檔案請求時，會直接提供檔案而非將請求路由至您的應用程式。

如需使用組態檔案或 Elastic Beanstalk 主控台設定靜態檔案的詳細資訊，請參閱[提供靜態檔案](environment-cfg-staticfiles.md)。

預設情況下，Ruby 環境中的代理伺服器會設定為提供靜態檔案如下：
+ `public` 資料夾中的檔案透過 `/public` 路徑和根網域 (`/` 路徑) 提供。
+ `public/assets` 子資料夾中的檔案透過 `/assets` 路徑提供。

下列範例說明預設組態的運作方式：
+ 若您的應用程式原始碼在名為 `public` 的資料夾中有一個名為 `logo.png` 的檔案，則代理伺服器會透過 `subdomain.elasticbeanstalk.com/public/logo.png` 和 `subdomain.elasticbeanstalk.com/logo.png` 將此檔案提供給使用者。
+ 若您的應用程式原始碼在 `public` 資料夾中有一個名為 `assets` 的資料夾，裡面含有一個名為 `logo.png` 的檔案，則代理伺服器會透過 `subdomain.elasticbeanstalk.com/assets/logo.png` 提供此檔案。

您可以為靜態檔案設定其他映射項目。如需詳細資訊，請參閱本主題後面部分的 [Ruby 組態命名空間](#ruby-namespaces)。

**注意**  
如果是 *Ruby 2.7 AL2 3.3.7 版*之前的平台版本，預設的 Elastic Beanstalk nginx 代理伺服器組態不支援透過根網域 (`subdomain.elasticbeanstalk.com/`) 提供靜態檔案。此平台版本於 2021 年 10 月 21 日推出。如需詳細資訊，請參閱*AWS Elastic Beanstalk 版本備註*的[新平台版本 - Ruby](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2021-10-21-linux.html#release-2021-10-21-linux.platforms.ruby)。

### 環境屬性
<a name="create_deploy_Ruby.env.console.ruby.envprops"></a>

**Environment Properties (環境屬性)** 的部分可讓您針對執行您應用程式的 Amazon EC2 執行個體，來指定其上的環境資訊設定。環境屬性會以金鑰值對的形式傳到應用程式。

Ruby 平台定義下列環境資訊的屬性：
+  **BUNDLE\$1WITHOUT** ‒ 自 [Gemfile](http://bundler.io/v1.15/man/gemfile.5.html) [安裝相依項目](http://bundler.io/bundle_install.html)時應忽略的群組清單，以冒號分隔。
+ **BUNDLER\$1DEPLOYMENT\$1MODE** ‒ 設為 `true` (預設值) 以使用 Bundler，在[部署模式](https://bundler.io/man/bundle-install.1.html#DEPLOYMENT-MODE)中安裝相依性。設定為 `false`，在開發模式中執行 `bundle install`。
**注意**  
這個環境屬性並未在 Amazon Linux AMI Ruby 平台分支 (Amazon Linux 2 之前的分支) 上定義。
+  **RAILS\$1SKIP\$1ASSET\$1COMPILATION** ‒ 設為 `true` 以在部署期間跳過執行 [http://guides.rubyonrails.org/asset_pipeline.html#precompiling-assets](http://guides.rubyonrails.org/asset_pipeline.html#precompiling-assets)。
+  **RAILS\$1SKIP\$1MIGRATIONS** ‒ 設為 `true` 以在部署期間跳過執行 [http://guides.rubyonrails.org/active_record_migrations.html#running-migrations](http://guides.rubyonrails.org/active_record_migrations.html#running-migrations)。
+  **RACK\$1ENV** ‒ 指定 Rack 的環境階段。例如，`development`、`production` 或 `test`。

在 Elastic Beanstalk 內所執行的 Ruby 環境中，可使用 `ENV` 物件來存取環境變數。例如，您可使用下列程式碼，來將名為 `API_ENDPOINT` 的屬性讀取到變數：

```
endpoint = ENV['API_ENDPOINT']
```

如需詳細資訊，請參閱 [環境變數和其他軟體設定](environments-cfg-softwaresettings.md)。

## Ruby 組態命名空間
<a name="ruby-namespaces"></a>

您可以使用[組態檔案](ebextensions.md)來設定組態選項，並在部署期間執行其他的執行個體設定工作。組態選項可以是[平台特定](command-options-specific.md)選項，也可以套用至 Elastic Beanstalk 服務整體中的所有[平台](command-options-general.md)。組態選項會組織成*命名空間*。

您可以使用 `aws:elasticbeanstalk:environment:proxy:staticfiles` 命名空間來設定環境代理以提供靜態檔案。您可以定義虛擬路徑到應用程式目錄的對應項目。

Ruby 平台不會定義任何特定於平台的命名空間。反而會定義通用 Rails 和 Rack 選項的環境屬性。

下列組態檔案會指定靜態檔案選項，將對應名為 `staticimages` 的目錄對應至路徑 `/images`，設定每個平台定義的環境屬性，以及設定名為 `LOGGING` 的其他環境屬性。

**Example .ebextensions/ruby-settings.config**  

```
option_settings:
  aws:elasticbeanstalk:environment:proxy:staticfiles:
    /images: staticimages
  aws:elasticbeanstalk:application:environment:
    BUNDLE_WITHOUT: test
    BUNDLER_DEPLOYMENT_MODE: true
    RACK_ENV: development
    RAILS_SKIP_ASSET_COMPILATION: true
    RAILS_SKIP_MIGRATIONS: true
    LOGGING: debug
```

**注意**  
`BUNDLER_DEPLOYMENT_MODE` 環境屬性和 `aws:elasticbeanstalk:environment:proxy:staticfiles` 命名空間並未在 Amazon Linux AMI Ruby 平台分支 (Amazon Linux 2 之前的分支) 上定義。

Elastic Beanstalk 可提供許多組態選項讓您自訂環境。除了組態檔案，您也可以使用主控台、已儲存組態、EB CLI 或 AWS CLI來設定組態選項。如需詳細資訊，請參閱[組態選項](command-options.md)。

# 在 Elastic Beanstalk 上使用 Gemfile 安裝套件
<a name="ruby-platform-gemfile"></a>

若要使用 RubyGems 安裝應用程式所需的套件，請在專案來源的根目錄中包含 `Gemfile` 檔案。

**Example Gemfile**  

```
source "https://rubygems.org"
gem 'sinatra'
gem 'json'
gem 'rack-parser'
```

如 `Gemfile` 檔案存在，Elastic Beanstalk 會執行 `bundle install` 來安裝相依性。如需詳細資訊，請參閱 Bundler.io 網站上的 [Gemfiles](https://bundler.io/man/gemfile.5.html) 和 [Bundle](https://bundler.io/man/bundle.1.html) 頁面。

**注意**  
除了預先安裝在 Ruby 平台上的預設版本外，您還可以使用 Puma 的其他版本。若要這麼做，請在 `Gemfile` 的項目中指定版本。您也可以使用自訂 `Gemfile` 來指定不同的應用程式伺服器，例如 Passenger。  
對於這兩種情況，您還需要設定 `Procfile` 以啟動應用程式伺服器。  
如需更多詳細資訊，請參閱*[使用 Procfile 設定應用程式程序](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/ruby-platform-procfile.html)**。*

# 在 Elastic Beanstalk 上使用 Procfile 設定應用程式程序。
<a name="ruby-platform-procfile"></a>

欲指定啟動 Ruby 應用程式的命令，請於原始碼套件的根目錄，納入名為 `Procfile` 的檔案。

**注意**  
Elastic Beanstalk 在 Amazon Linux AMI Ruby 平台分支 (Amazon Linux 2 之前的分支) 上不支援此功能。含有 *with Puma* 或 *with Passenger* 名稱的平台分支，不論其 Ruby 版本為何，都會優先於 Amazon Linux 2 且不支援 `Procfile` 功能。

如需撰寫和使用 的詳細資訊`Procfile`，請參閱 [Buildfile 和 Procfile](platforms-linux-extend.build-proc.md)。

當您不提供 時`Procfile`，Elastic Beanstalk 會產生預設 `Procfile`。如果您的 `Gemfile`包含 Puma，Elastic Beanstalk 會假設您想要使用您提供的 Puma 版本，並產生下列預設 `Procfile`。

```
web: bundle exec puma -C /opt/elasticbeanstalk/config/private/pumaconf.rb
```

如果您的 `Gemfile` 不包含 Puma，Elastic Beanstalk 會假設您使用預先安裝的 Puma 應用程式伺服器，並產生下列預設 `Procfile`。在 Amazon Linux 2 Ruby 平台分支上，`Procfile`如果您不提供 ，Elastic Beanstalk 一律會產生下列預設值`Procfile`。

```
web: puma -C /opt/elasticbeanstalk/config/private/pumaconf.rb
```

**注意**  
[2024 年 10 月 10](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2024-10-10-al2-10-2024-retire.html) 日，最後一個 Ruby Amazon Linux 2 平台分支已淘汰。所有目前[支援的 Ruby 平台分支](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.ruby)都以 Amazon Linux 2023 為基礎。如需遷移的相關資訊，請參閱 [從 Amazon Linux 2 遷移到 Amazon Linux 2023](using-features.migration-al.generic.from-al2.md)。

如果你想使用 Passenger 應用程式伺服器，請使用下面的範例檔案，設定 Ruby 環境來安裝和使用 Passenger。

1. 使用此範例檔案安裝 Passenger。  
**Example Gemfile**  

   ```
   source 'https://rubygems.org'
   gem 'passenger'
   ```

1. 使用此範例檔案，指示 Elastic Beanstalk 啟動 Passenger。  
**Example Procfile**  

   ```
   web: bundle exec passenger start /var/app/current --socket /var/run/puma/my_app.sock
   ```

**注意**  
您不必更改 nginx 代理伺服器組態中的任何內容，即可使用 Passenger。要使用其他應用程序伺服器，您可能需要自訂 nginx 組態，以適當地將請求轉送到應用程式。