Ruby¶
您可以利用 Simple Hosting 的 Ruby 主機來輕鬆佈署您的 Ruby 應用程式。
準備工作¶
使用 Simple Hosting 的 Ruby 主機前:
您必須要在本機上也安裝這些程式:
ruby
bundler
git
SSH client
目錄結構¶
為了與 Rack 的目錄結構相容,您的專案目錄必須使用特定的結構,包含一些特別的目錄與檔案:
config.ru
根據 `Rack 文件<http://rack.rubyforge.org/doc/SPEC.html>`_ 所建立的檔案。
public/
:如果您有靜態物件,請存放在此目錄內。
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
備註
在安裝相依套件時,將不會安裝在設定檔中標示為 development
與 test
的套件。
安裝 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 終端機登入後使用命令列工具 (psql
、pg_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 終端機登入主機並且使用預設的命令 (mysql
、mysqldump
) 來管理資料庫,或是使用網頁的 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 中。並且 Gemfile
與 Gemfile.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