我們經(jīng)常使用前端的免費(fèi)空間GitHub,但是后端經(jīng)常聽(tīng)到的是Heroku云平臺(tái),目前支持以下語(yǔ)言。本文主要介紹Node.js組合MySQL與Git上傳。
本篇目錄
環(huán)境建置
注冊(cè)
安裝Heroku Cli
登入Heroku云平臺(tái)
布署
Git Ignore
建立Git
新增/連接APP
布署Heroku云平臺(tái)
MySQL配備
Session Store
報(bào)錯(cuò)處理
環(huán)境建置
注冊(cè)
首先,我們先進(jìn)入官網(wǎng),選擇注冊(cè)(Sign up)
填寫(xiě)姓名、郵件等信息
等候Heroku云平臺(tái)將驗(yàn)證信寄到信箱后,點(diǎn)選連接并連接到輸入密碼
完成
安裝Heroku cli
以后我們都要用Heroku cli先附上下載頁(yè)面。連接后,根據(jù)您的系統(tǒng)安裝合適的版本。
另外,我們會(huì)組合Git上傳專案,Git安裝可參考此處,
關(guān)於Git版本控制可參考高見(jiàn)龍大Git教學(xué)。
image
為了保證以后的順利運(yùn)行,我們還需要Node版本8以上npm,您可以使用以下指令查詢是否已安裝。
$node--version
v10.16.1
$npm--version
6.12.0
登入Heroku
在完成上述環(huán)境建設(shè)后,您可以在終端上輸入:
$herokulogin
heroku:Press any key to open up the browser to login or q to exit:
Opening browser to https://cli-auth.heroku.com/auth/browser/xxx
Logging in...done
Logged in as [email protected]
這時(shí)會(huì)打開(kāi)Heroku登錄頁(yè)面,輸入帳號(hào)密碼OK了!
布署
資料夾目前如下:
Git Ignore
在Git上傳前應(yīng)該做的重大事情。
專案內(nèi)有個(gè)node_modules不需要上傳資料,因?yàn)樗萘看?,一般?lái)說(shuō)Heroku云平臺(tái)會(huì)自動(dòng)根據(jù)package.json安裝所需的套件。因此,我們需要先建立它.gitignore文件和新的忽略規(guī)則。
建立Git
再來(lái)建立專案Git版本控制:
//進(jìn)入專用數(shù)據(jù)
$cd chatroom
$git init
$git add.
$git commit -m 'first commit'
新增/連接APP
新增HerokuAPP,后面沒(méi)有名字Heroku會(huì)自己給與APP隨機(jī)名字。
$ heroku create [app-name]
Creating ? thef2e-chatroom...done
https://thef2e-chatroom.herokuapp.com/|
https://git.heroku.com/thef2e-chatroom.git
請(qǐng)注意,如果您想更改項(xiàng)目名稱,請(qǐng)?jiān)L問(wèn)官方網(wǎng)站setting更改他的兩個(gè)網(wǎng)站不會(huì)改變,所以輸入以下指令更安全!
$herokuapps:rename--app[old-name][new-name]
現(xiàn)在,我們得到了APP網(wǎng)址以及Git數(shù)據(jù)庫(kù)網(wǎng)站。我們使用它Heroku將本地專案與遠(yuǎn)端聯(lián)系起來(lái):
$herokugit:remote-a[app-name]
//查看
$ git push heroku master
Enumerating objects: 6, done.
Counting objects: 100% (6/6), done.
Delta compression using up to 4 threads
Compressing objects: 100% (6/6), done.
Writing objects: 100% (6/6), 10.87 KiB | 5.44 MiB/s, done.
Total 6 (delta 0), reused 0 (delta 0)
remote: Compressing source files... done.
remote: Building source:
remote:
remote: -----> Node.js app detected
remote:
remote: -----> Creating runtime environment
remote:
remote: NPM_CONFIG_LOGLEVEL=error
remote: NODE_ENV=production
remote: NODE_MODULES_CACHE=true
remote: NODE_VERBOSE=false
remote:
remote: -----> Installing binaries
remote: engines.node (package.json): unspecified
remote: engines.npm (package.json): unspecified (use default)
remote:
remote: Resolving node version 12.x...
remote: Downloading and installing node 12.13.0...
remote: Using default npm version: 6.12.0
remote:
remote: -----> Installing dependencies
remote: Installing node modules (package.json + package-lock)
remote: added 123 packages from 102 contributors and audited 239 packages in 3.359s
remote: found 0 vulnerabilities
remote:
remote:
remote: -----> Build
remote:
remote: -----> Pruning devDependencies
remote: audited 239 packages in 1.408s
remote: found 0 vulnerabilities
remote:
remote:
remote: -----> Caching build
remote: - node_modules
remote:
remote: -----> Build succeeded!
remote: ! This app may not specify any way to start a node process
remote: https://devcenter.heroku.com/articles/nodejs-support#default-web-process-type
remote:
remote: -----> Discovering process types
remote: Procfile declares types -> (none)
remote: Default types for buildpack -> web
remote:
remote: -----> Compressing...
remote: Done: 23.1M
remote: -----> Launching...
remote: Released v3
remote: https://thef2e-chatroom.herokuapp.com/ deployed to Heroku
remote:
remote: Verifying deploy... done.
To https://git.heroku.com/thef2e-chatroom.git
* [new branch] master -> master
如果你按照我的倉(cāng)庫(kù)步驟建立一個(gè)項(xiàng)目,你會(huì)發(fā)現(xiàn)終端有一行顯示驚嘆號(hào),因?yàn)镠eroku需要一行Start指示建立專案,我們package.json在報(bào)錯(cuò)之前,檔中沒(méi)有明確的指示。
所以我們需要在那里JSON檔內(nèi)多新增一行start,并重新push一次,Heroku環(huán)境建設(shè)成功。
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "node index.js"
},
MySQL配備
然后我們來(lái)到第二個(gè)價(jià)格,準(zhǔn)備把當(dāng)?shù)氐臄?shù)據(jù)庫(kù)push上來(lái),這次使用的服務(wù)是ClearDB。
我們必須首先增加一個(gè)新的項(xiàng)目Add-ons:
$ heroku addons:create cleardb:ignite
Creating cleardb:ignite on ? thef2e-chatroom... free
Created cleardb-octagonal-43734 as CLEARDB_DATABASE_URL
Use heroku addons:docs cleardb to view documentation
還可以在Heroku新網(wǎng)站:
image
通過(guò)以下指令,我們可以知道ClearDB數(shù)據(jù)庫(kù)配備:
$ heroku config | grep CLEARDB_DATABASE_URL
CLEARDB_DATABASE_URL:mysql://be6c96a165xxx0:[email protected]/heroku_e8d000339887xxx?reconnect=true
// 補(bǔ)充
// username: be6c96a16xxxd
// password: c504fxxx
// host: us-cdbr-iron-east-05.cleardb.net
// database: heroku_e8d000339887xxx
接著開(kāi)啟MySQLWorkbench,新的連接可以連接到新的數(shù)據(jù)庫(kù),然后連接到當(dāng)?shù)囟薲atabase導(dǎo)出,引入遠(yuǎn)端數(shù)據(jù)庫(kù)OK了!
image
順便說(shuō)一句,由于遠(yuǎn)端數(shù)據(jù)庫(kù)的增加,我們?cè)绦虼a中連接的本地端數(shù)據(jù)庫(kù)也需要更換為遠(yuǎn)端數(shù)據(jù)庫(kù)!
SessionStore
最后,假如你有介紹Session在項(xiàng)目中,還需要添加一個(gè)新的配備特性store,也就是Session存放的地方,在express-sessionnpm下面可以找到很多存儲(chǔ)方法。
image
我們選用express-mysql-session,同樣先安裝:
$ npm install express-mysql-session --save
并引入和使用(設(shè)置在Session上方):
const MySQLStore = require('express-mysql-session')(session);
const options = {
connectionLimit: 10,
host: 'us-cdbr-iron-east-05.cleardb.net',
user: 'be6c96a165xxx0',
password: 'c504fxxx',
database: 'heroku_e8d000339887xxx'
}
const sessionStore = new MySQLStore(options);
// 此處為 session 設(shè)置
app.use(session({
secret: 'thef2e_chatroom',
resave: false,
saveUninitialized: false,
cookie: {
maxAge: 60 * 60 * 1000 * 3,
},
}));
報(bào)錯(cuò)處理
在APP網(wǎng)站右上角可以打開(kāi)APP(如果你看到這個(gè)頁(yè)面代表錯(cuò)誤。
此時(shí)可以使用以下指令查詢(使用以下指令)ctrlc撤出):
$ heroku logs --tail
如果你報(bào)錯(cuò)了,多看終端,仔細(xì)看肯定會(huì)發(fā)現(xiàn)問(wèn)題!
以上是不讀報(bào)錯(cuò)的最大經(jīng)驗(yàn)。
聲明本文內(nèi)容來(lái)自網(wǎng)絡(luò),若涉及侵權(quán),請(qǐng)聯(lián)系我們刪除! 投稿需知:請(qǐng)以word形式發(fā)送至郵箱[email protected]
當(dāng)局者迷,旁觀者清,存在競(jìng)爭(zhēng),才會(huì)進(jìn)步