Ruby

您可以利用 Simple Hosting 的 Ruby 主機來輕鬆佈署您的 Ruby 應用程式。

準備工作

使用 Simple Hosting 的 Ruby 主機前:

  • 一些 Ruby 的基本知識

  • 一些 Git 的基本知識

  • 兼容 Ruby (MRI) 2.4 的應用程式

  • 兼容 Rack 框架

  • 使用 Bundler 管理相依套件

您必須要在本機上也安裝這些程式:

  • ruby

  • bundler

  • git

  • SSH client

目錄結構

為了與 Rack 的目錄結構相容,您的專案目錄必須使用特定的結構,包含一些特別的目錄與檔案:

Ruby on Rails 應用程式 (rails >2) 也同樣可以運作。

目錄結構範例:

.
├── config.ru
└── public
    └── robots.txt

安裝相依套件

若要安裝您的應用程式相依套件,您必須使用 Gemfile 宣告您的相依套件,並且將此檔案存放在專案的根目錄。此檔案的內容需遵照 Bundler 文件 的說明。

Gemfile 範例:

source 'https://rubygems.org'
gem 'rails', '~> 4.0.0'
gem 'debugger', group: :development

備註

在安裝相依套件時,將不會安裝在設定檔中標示為 developmenttest 的套件。

安裝 bundle

在您宣告相依套件後,您需要在您的電腦執行 bundle install 來建立 Gemfile.lock

您的主機會利用此檔案來安裝相依套件。因此,您必須將此檔案加入 Git 並且推送到主機上。

網域名稱

在建立主機時,就已經在測試過程中自動建立與主機連結的網域名稱。您可以連結其他域名到您的主機,全部都會連結到同一份程式碼。

如果您希望 Simple Hosting 主機依照您的網域名稱路由到不同的專案,您需要建立一個 config.ru 的檔案,並且包含下列內容:

範例:

map 'http://www.example.com/' do
     run Proc.new { |env|
        [200, {'Content-Type' => 'text/html; charset="utf-8"'},
             ['<!DOCTYPE html><html><meta charset="utf-8"><title>It works',
             "</title><b>It works!</b><br /><br />You've reached ",
             'www.example.com'
            ]
        ]
     }
end

map 'http://www.another-example.com/' do
     run Proc.new { |env|
        [200, {'Content-Type' => 'text/html; charset="utf-8"'},
             ['<!DOCTYPE html><html><meta charset="utf-8"><title>It works',
             "</title><b>It works!</b><br /><br />You've reached ",
             'www.another-example.com'
            ]
        ]
     }
end

資料庫

與其他規格的主機相同,您可以在三種資料庫中選擇一種來使用:MySQL、PostgreSQL 或 MongoDB。

PostgreSQL

Simple Hosting Ruby 主機上可以使用 PostgreSQL 9.6 版。

連線資訊:

Hostname: localhost
Port: 5432

預設上,您不需要密碼就可以使用帳號 hosting-db,連接資料庫 postgres 。但我們建議您設定安全性高的密碼。

您可以建立無數量限制的資料庫與資料庫使用者; 唯一的限制就是您的硬碟大小,您可以隨時增加硬碟大小,最大可支援至 1TB。

您可以使用 SSH 終端機登入後使用命令列工具 (psqlpg_dump 等) 進行資料庫管理,或是從控制台中使用 phpPgAdmin。請查閱 Simple Hosting 上的 PostgreSQL 其他文件來了解更多。

下方的 config/database.yml 範例示範如何使用 Ruby on Rails 連接預設的資料庫:

production:
  adapter: postgresql
  database: ruby-example
  host: localhost
  port: 5432
  username: hosting-db
  password:
  encoding: unicode
  pool: 5

MySQL

Simple Hosting 的 Ruby 規格的主機目前已支援 MySQL 5.7。

連線資訊:

Socket: /srv/run/mysqld/mysqld.sock

您可以透過 Unix Socket 來連接資料庫,路徑在 /srv/run/mysqld/mysqld.sock。預設的帳號是 root 並且沒有密碼。但是建議您為您的應用程式建立安全性高的帳號密碼。您可以使用 default_db 這個資料庫來進行一些測試,此資料庫在主機建立時就一起被建立。

您可以建立無數量限制的資料庫; 唯一的限制就是您的硬碟大小,您可以隨時增加硬碟大小,最大可支援 1TB。

您可以使用 SSH 終端機登入主機並且使用預設的命令 (mysqlmysqldump) 來管理資料庫,或是使用網頁的 phpMyAdmin 工具。請查閱 Simple Hosting 的 MySQL 管理工具頁面。

下方的 config/database.yml 範例示範如何使用 Ruby on Rails 連接預設的資料庫:

production:
  adapter: mysql2
  socket: /srv/run/mysqld/mysqld.sock
  database: default_db
  username: root
  password:
  encoding: utf-8
  pool: 5

MongoDB

Simple Hosting 上可以使用 MongoDB 3.2 的版本。

連線資訊:

Hostname: localhost
Port: 27017

您可以透過 Simple Hosting 上的 27017 埠連接到 MongoDB 。預設上沒有帳號密碼,但是建議您為您的應用程式建立安全性高的帳號密碼。

您可以建立無上限的使用者與資料庫,唯一的限制是您的硬碟大小,您可以隨時增加硬碟,最高可到 1TB。

您可以使用 SSH 終端機登入後使用命令 mongo 來管理資料庫,或是從控制台中使用 Adminer。

下方的小型 Node.js 程式碼可以測試 Simple Hosting 上的 MongoDB 資料庫連線是否正常:

這是 Mongoid gem 的 mongoid.yml 範例檔:

production:
  sessions:
    default:
      database: ruby-example
      hosts:
        - localhost:27017

推送您的應用程式到主機

您必須使用 git 將應用程式推送到您的主機進行佈署。請參考下方的說明。

建立本機的 git 儲存庫 (repository)

首先,在您的本機電腦中執行下列指令來初始化 Git 儲存庫並追蹤您的專案:

$ git init
$ git add .
$ git commit -m "Initial commit"

備註

請記得要將 config.ru 納入 Git 中。並且 GemfileGemfile.lock 檔也需要納入 Git 中。

佈署您的應用程式

備註

以下的範例您同樣可以在主機管理介面的佈署中找到相關資訊,主機的資訊中有包含了 $GIT_URL 的實際值。

在您於本機使用 git 管理您的專案後,您就可以推送到您的主機進行佈署。

$ git remote add gandi $GIT_URL
$ git push gandi master
$ ssh $GIT_URL deploy default.git

若您要佈署特定的分支或是標籤版號 (例如 production 分支),您只需要指定即可:

$ git push gandi production
$ ssh $GIT_URL deploy default.git production

日誌檔與故障排除

您應用程式輸出的標準錯誤訊息 (stdout) 將會儲存在主機的空間中,如果您需要查看:

  • 透過 SSH 登入時,位置是:/srv/data/var/log/www/uwsgi.log

  • 透過 SFTP 登入時,位置是:/lamp0/var/log/www/uwsgi.log

查閱這個檔案能夠幫助您檢查應用程式是否正確啟動。

週期任務(Cron jobs)

Ruby 主機同樣與其他主機一樣,有提供週期任務 (Cron Jobs) 的設定。您在週期任務中可以使用環境變數 (請參閱 系統架構 章節的詳細說明)。

範例:

1@hourly 0 test (cd /srv/data/web/vhosts/default; rake my_namespace:some_useful_task)

關於 Simple Hosting 的週期任務資料,請參考 `Anacron`_ 章節。

系統架構

Ruby 主機使用 Uwsgi 來執行您的程式碼。Apache 則用來存取靜態物件。』Apache <http://httpd.apache.org/>』_ 負責存放在 public/ 內的靜態物件,並將其他連線轉給 Uwsgi。

您可以在週期任務中使用以下環境變數:

  • RAILS_ENV=production

  • RACK_ENV=production