你好,我是富士大顆 Aiko
不可能接到業配吧
對,沒有。
一切的神奇故事發生於那兩天無法註冊 Heroku 的 8 月底(沒錯,9/16 Demo Day)
我們做了每個查得到的可能:開無痕、換瀏覽器、換裝置、換email、換地區、清 cookie、寫信給客服(他們有設計只能會員登入才可以寫信給客服,我找這個入口真的找到天荒地老,然後回信說請如果一直發生請耐心等候(???)、在他們三百年沒更新的社群帳號留言...
結果都是--
也沒任何解釋我們是做錯什麼了老天爺!
還好想到老師有提過的一個台灣人做的部署平台,今年剛上線
就是 Zeabur
好親切的繁體中文!就決定是他了
註冊會員之後超快,這邊如果你用 github 登入,就像什麼事情也沒發生一樣快
就可以來新增專案了(左邊是我們的專案)
使用免費專案的話,只能有一個專案歐
新增之後會看到像這樣的後台:
我們可以分左邊跟右邊大塊
左邊由上到下,是專案人員(這邊你可以邀集專案同伴,同樣也是註冊就好)
環境設定就可以新增:像是 Production, Test (我對不起老師,沒有寫測試!)
(要走到這步驟的話,我會建議先跳到下面看 Rails 專案的部分
設定完整,部署會快很多)
這邊可以很直觀的點,看你要連結在 github 上的哪個專案(你必須是擁有者,不然會需要擁有者授權)的哪個分支!
像我們是 Rails 系統就會抓你是 Rails:
好處是 Zeabur 會直接抓那個分支最新的狀況,概念有點像是 CD(我不確定自己講的哈哈哈哈)
那我們是使用 PG,選擇要用的 production 環境資料庫,Zeabur 會幫你設定好:
你可以透過 Zeabur 提供的 Host、Port、Password、Username 去看線上的資料庫
而這些 databse 的資料就是要跟 Rails 專案的環境變數綁定喔~
這邊有兩種選項:
自己選自己買的域名
如果不是 Cloudflare 購買的話,
這邊需要另外到購買的平台(e.g. GoDaddy)修改 DNS 指向; 也要修改
從 zeabur 產生的,長相會是 xxxx.zeabur.app
xxxx 是你自己取
另外也可以有 sub 域名,讓 sub 域名指向設定的主域名
例如 域名長這樣 iding.cc
sub 可以是 www.iding.cc
當有人前往 www.iding.cc 畫面會跑 301 也就是說這個網域已經搬家~~
搬到 iding.cc
config.environment.production.rb
host 網域指定,這邊是你的網域,可能透過網域代理商購買,
或者直接在 zeabur 設定,就會是有帶 zeabur.app 的網址
config.hosts << "你的網域,前面不用 http"
在 production 環境「什麼樣的資訊」應該被記錄
default = :info
config.log_level = :debug
幫助產出 log,這樣部署平台才會看到 log
config.logger = if ENV["RAILS_LOG_TO_STDOUT"].present?
ActiveSupport::TaggedLogging.new(ActiveSupport::Logger.new(STDOUT))
else
Rails.logger
end
解決跑版、影片讀取
config.public_file_server.enabled = ENV["RAILS_SERVE_STATIC_FILES"].present?
#這裡要加入 zeabur 的環境變數 RAILS_SERVE_STATIC_FILES = true
這邊的重點就是要把 credential 有用的金鑰,通通轉成 ENV 形式(本來的 credetional 檔案就讓他靜靜的不用動)
database.yml
主要是告訴 Rails 要使用哪個 pg(Zeabur送的那個)
default: &default
adapter: postgresql
encoding: unicode
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
production:
<<: *default
port: <%= ENV["POSTGRES_PORT"] %>
host: <%= ENV["POSTGRES_HOST"] %>
database: <%= ENV["POSTGRES_DB"] %>
username: <%= ENV["POSTGRES_USER"] %>
password: <%= ENV["POSTGRES_PASSWORD"] %>
例如我們專案有 carrierwave, device:
CarrierWave.configure do |config|
config.fog_provider = 'fog/aws'
config.fog_credentials = {
provider: 'AWS',
aws_access_key_id: ENV["AWS_ACCESS_KEY_ID"],
aws_secret_access_key: ENV["AWS_ACCESS_KEY_SECRET"],
host: 's3-ap-northeast-1.amazonaws.com',
region: 'ap-northeast-1'
}
config.fog_directory = ENV["AWS_S3_BUCKET_NAME"]
end
config.omniauth :google_oauth2, ENV["GOOGLE_OAUTH2_CLIENT_ID"], ENV["GOOGLE_OAUTH2_CLIENT_SECRET"
請確定所有會用到的環境變數都已經設定在部署平台!
包括資料庫連接資訊、第三方服務的 API 金鑰等。
(這是我們的部分 ENV)
這個才會把環境切到 production!!
並不是說你 Zeabur 環境設定手動編輯'production' 環境就是 'production'
那邊你想亂寫'自然環境' 也是可以的...
把資料庫遷移,會根據 schema 建造 production 環境的資料庫結構
$RAILS_ENV=production rake db:migrate
如果有種子資料記得要
RAILS_ENV=production rake db:seed
通常會將 JavaScript、CSS 和圖片等靜態資源進行預編譯
RAILS_ENV=production rake assets:precompile
在 production 環境要裝的套件
$bundle install
optional, 可能有套件需要更新
$bundle update
接著就是一連串的看上去的功能有沒有壞掉,看 log、修 code、終端機指令、deploy...
這樣的循環!
有其他問題也可以在 Zeabur 的 discord 群組發問,有真人服務的最棒了!