前言

在這個浮誇的時代,如果網頁上沒有酷炫的功能或特效,似乎就遜掉了;如何讓網頁變得酷炫呢?其中一個方法就是使用 CSS3 Animation!只要使用了 CSS3 Animation 就可以讓網頁中的元素動起來,立馬讓你的網頁酷炫度超越世界上 80% 的網頁!

而我個人身為一個全端工程師,稍微研究一下 CSS3 Animation 也是合理的,而且只要會一點點就可以拿來唬唬人,何樂而不為?很可惜這個技能就是唬不了正妹,哎,誰叫正妹只喜歡魔術呢~

不過請特別注意 CSS3 的 Animation 與 Transition 並不相同喔!雖然都可以做到相似的效果,有時看起來也真的很像,但實際上 Animation 與 Transition 依操作的程度不同所以適合使用的地方也會有所不同,或許我之後會再寫一篇文章介紹 Transition。(吧?)

就讓我們一起來看看 CSS3 Animation 大法怎麼練吧!

CSS3 Animation 第一級

假設我們要在一個 div 元素上加上動畫特效:

Step 1:定義要使用哪個關鍵影格(keyframe)來執行動畫

div {
    width: 100px;
    height: 100px;
    background: red;
    position: relative;
    -webkit-animation: animation-keyframe-name 5s; /* Chrome, Safari, Opera */
    -webkit-animation-iteration-count: infinite;
    animation: animation-keyframe-name 5s;
    animation-iteration-count: infinite;
}

這段 CSS 語法就是代表 div 元素要用哪個關鍵影格來執行動畫,詳細的動畫動作都會寫在關鍵影格裡面,在這邊的意思就是要使用一個名稱叫 animation-keyframe-name 的關鍵影格來進行動畫,後面的 5s 就代表這個動畫執行的時間會是 5 秒鐘。而 animation-iteration-count: infinite 則代表這個關鍵影格動畫會不斷重複執行。

特別注意有 -webkit- 這個前綴的 CSS 語法是為了支援 webkit 核心的瀏覽器,例如:Chrome、Safari、Opera 等等。

所以這段語法翻譯成白話文就是:div 這個元素要使用一個叫做 animation-keyframe-name 的關鍵影格來進行動畫,動畫執行的時間長度為 5 秒鐘,且動畫會不斷重複執行。

keyframe 的名稱如果不想要叫 animation-keyframe-name,也可以改成其他的,比如:fadein-keyframefadeout-keyframe 等等。

Step 2:定義關鍵影格(keyframe)中動畫如何變化

/* Chrome, Safari, Opera */
@-webkit-keyframes animation-keyframe-name {
    from {background: red;}
    to {background: yellow;}
}

/* Standard syntax */
@keyframes animation-keyframe-name {
    from {background: red;}
    to {background: yellow;}
}

這段 CSS 語法就定義了 animation-keyframe-name 這個關鍵影格的動畫變化,它會在 5 秒之內從原本背景色紅色(from {background: red;})變為背景色黃色(to {background: yellow;}),就這樣我們就可以寫好 CSS3 動畫了,超簡單 der!

CSS3 Animation 第一級展示

CSS3 Animation 第二級

CSS3 Animation 第一級只有 from to 這兩種狀態可以指定動畫的變化,總感覺缺少了點什麼,如果好死不死動畫想要指定三種狀態變化怎麼辦?這時就要使用 CSS3 Animation 第二級了!在 CSS3 Animation 第二級我們可以使用動畫執行時間百分比來指定動畫變化的狀態。

/* Chrome, Safari, Opera */
@-webkit-keyframes animation-keyframe-name {
    0%   {background: red; left:0px; top:0px;}
    25%  {background: yellow; left:200px; top:0px;}
    50%  {background: blue; left:200px; top:200px;}
    75%  {background: green; left:0px; top:200px;}
    100% {background: red; left:0px; top:0px;}
}

/* Standard syntax */
@keyframes animation-keyframe-name {
    0%   {background: red; left:0px; top:0px;}
    25%  {background: yellow; left:200px; top:0px;}
    50%  {background: blue; left:200px; top:200px;}
    75%  {background: green; left:0px; top:200px;}
    100% {background: red; left:0px; top:0px;}
}

這段 CSS 語法將動畫的變化分成五個狀態,在動畫執行時間 0% 的時候是背景紅色的狀態(0% {background: red;}),在動畫執行時間 25% 的時候是背景黃色的狀態(25% {background: yellow;}),在動畫執行時間 50% 的時候是背景藍色的狀態(50% {background: blue;}),在動畫執行時間 75% 的時候是背景綠色的狀態(75% {background: green;}),在動畫執行時間 100% 的時候是背景變回紅色的狀態(100% {background: red;}),在我們這個例子裡動畫執行時間 100% 也就是動畫執行時間在第五秒的時候。如此我們就可以做更多細緻的動畫了。

CSS3 Animation 第二級展示

CSS3 Animation 第三級

在 CSS3 Animation 第三級我們可以使用更多屬性(property)來讓動畫有更多調整的空間,這些 animation 相關的 property 列表如下:

CSS 屬性 說明
animation-delay 設定元素在被載入之後到開始執行動畫之間的延遲時間
animation-direction 設定元素在動畫執行完之後,是否要以相反方向的方式播放,或是從頭開始以原來的方向重複播放。
animation-duration 設定整個動畫執行一次的時間長度
animation-iteration-count 設定動畫執行的次數,若要不斷重複執行,則可設為 infinite
animation-play-state 可用來暫停或繼續動畫播放
animation-fill-mode 設定元素在動畫執行前後如何套用 CSS 的樣式
animation-timing-function 設定動畫執行的時間函數

我們將所有動畫相關的屬性都使用看看:

div {
    width: 100px;
    height: 100px;
    background: red;
    position: relative;
    /* Chrome, Safari, Opera */
    -webkit-animation-name: animation-keyframe-name;
    -webkit-animation-duration: 5s;
    -webkit-animation-timing-function: linear;
    -webkit-animation-delay: 2s;
    -webkit-animation-iteration-count: infinite;
    -webkit-animation-direction: alternate;
    -webkit-animation-play-state: running;
    /* Standard syntax */
    animation-name: animation-keyframe-name;
    animation-duration: 5s;
    animation-timing-function: linear;
    animation-delay: 2s;
    animation-iteration-count: infinite;
    animation-direction: alternate;
    animation-play-state: running;
}

CSS3 Animation 第三級展示

感覺越來越強了!

CSS3 Animation 第四級

在 CSS3 Animation 第三級我們學會使用更多動畫相關屬性了,但 CSS 的語法卻變得很冗長,這時就要使出 CSS3 Animation 第四級,這樣就可以寫出更精簡的 CSS3 Animation 語法了!

上面例子的:

animation-name: animation-keyframe-name;
animation-duration: 5s;
animation-timing-function: linear;
animation-delay: 2s;
animation-iteration-count: infinite;
animation-direction: alternate;
animation-play-state: running;

可以改寫成:

animation: animation-keyframe-name 5s linear 2s infinite alternate;

所以就會變成:

div {
    -webkit-animation: animation-keyframe-name 5s linear 2s infinite alternate; /* Chrome, Safari, Opera */
    animation: animation-keyframe-name 5s linear 2s infinite alternate; /* Standard syntax */
}

CSS3 Animation 大法大功告成!

CSS3 Animation 第四級展示

結語

我們已經練完了 CSS3 Animation 大法的前四級,其實只要學會這些技巧,大概就能做出不錯的特效,只是動畫如何安排才會吸引人就要看個人的 Sense 了,像我就沒有什麼 Sense~

或許可以去請教對動畫最有 Sense 的 Rice Tseng 公主!

前言

最近為了 training 新人,我在 iNDIEVOX 主持了每兩週會舉行一次的技術分享會,每位與會人員都需要準備一個分享講題,講題可以是任何開發技術相關的主題,甚至是相關產業新聞。

不過最近有些忙碌,加上世界杯熬夜的影響,我自己得準備的分享講題眼看就要開天窗了,只好拿出去年在 HappyDesigner Mini 分享會 #3 的講題來充充場面,剛好也可以逼自己整理成 blog!

那麼…… 究竟要如何做出網頁版 iTunes 11 的封面背景特效呢?在哪裡才能買得到呢?

… … 我們這邊會直接說明如何實作,所以是買不到的喔!

觀察分析

首先讓我們觀察分析一下 iTunes 11 的封面特效:

透過我們精準的觀察與分析之後,我們可以將 iTunes 11 的封面特效歸納成以下三點:

  1. 專輯資訊字體顏色配色與專輯封面配色相似
  2. 專輯資訊區塊背景色與專輯封面背景色相似
  3. 專輯資訊區塊背景色形成一個模糊遮罩蓋在專輯封面上

也就是說我們只要做到以上三點,大概就可以做到類似 iTunes 11 的封面特效了!

實作

Step 1:實作蓋在專輯封面上模糊遮罩

首先我們先不管顏色,看看是否能用 CSS 3 來實作蓋在專輯封面上模糊遮罩,研究一番之後發現並不難實作,CSS 3 的語法如下:

.mask {
    box-shadow: rgb(9, 8, 9) 14px 17px 25px inset,
                rgb(9, 8, 9) -1px -1px 170px inset;
}

我們使用 CSS 3 中的 box-shadow 這個 property 來實做陰影效果,將這個陰影蓋在封面上便可以形成一個模糊遮罩,其中 rgb(9, 8, 8) 表示陰影的顏色,inset 表示陰影是往區塊內部長,14px 17px 25px 分別表示陰影向水平方向長的長度、陰影向垂直方向長的長度、陰影模糊的長度,由於陰影是向區塊內長,分別就表示水平方向由左向內長 14px 的陰影、垂直方向由上向內長 17px、然後都長 25px 的模糊程度。

同理類推,底下的 rgb(9, 8, 9) -1px -1px 170px inset 就表示水平方向由右向內長 1px 的陰影、垂直方向由下向內長 1px、然後都長 170px 的模糊程度。

這個語法會形成像這樣的效果:

太棒了!小小的一段 CSS 3 語法居然帶給我們這麼大的成就感,聰明的我們把這個遮罩蓋在封面像就會形成這樣的效果:

如此我們就可以暫時使用黑色背景、白色字體、黑色遮罩來完成第一版的 iTunes 11 封面背景效果。

第一版成品展示

Step 2:萃取出專輯封面主要顏色,讓背景色、字體顏色、模糊遮罩配色與專輯封面配色相似

實作完模糊遮罩之後,剛剛第一步我們先擱在一邊的顏色就是接下來的重點了,所謂「萃取出專輯封面主要顏色」究竟是怎麼一回事呢?感覺好像需要用到演算法?沒有錯!要取出專輯封面的主要顏色確實需要借助演算法這個高深的技巧!

我們可以以人類最直觀的想法來猜猜演算法應該會怎麼實作:首先每張圖片都是由若干像素組合而成,而每個像素都有一個顏色,我們可以用數數的方式找出最多相同顏色的像素取出成為一個代表色,若要找出多個代表色,那就可以用同的想法類推,讓顏色接近的像素聚集在一起,分成一堆一堆的,若要取十個顏色,就分成十堆,讓每一堆的像素數都相同,然後將這十個顏色堆的顏色取平均色,我們就可以萃取出圖片的十個代表色了!

類似想法的演算法其實已經有許多人想出來、也實作好程式了,其中一個最有名的演算法就叫做 Color Quantization,它的核心精神就像我們上述的做法一樣把圖片的顏色像切豆腐一樣去分堆,去找出代表色,各種不同的演算法其實就只是在於切法的不同而已!

其實這樣的演算法最早是用來壓縮圖像使用的,我們希望儘量用較少的顏色來重畫原來的圖片,又不希望重畫的圖片與原來的圖片差太多,因此就要找出圖片的主要代表色來重畫原圖,這樣重畫的壓縮圖片就不會與原來的圖片差太多,又能達到壓縮效果!

詳細演算法可以寫成好幾篇部落格,因此我就不在這邊贅述,有興趣詳細了解的可以參考這個網站

我們現在已經知道要取出圖片的主要代表色就要使用 Color Quantization 演算法,那接下來要自己實做演算法嗎?哈哈哈!當然不必啊!像這種有名的演算法一定有一大堆已經寫好的開源碼可以使用!

這邊我們使用 Color Thief 來取出圖片的主要代表色,首先引入函式庫到網頁中:

<script type="text/javascript" src="/path/to/color-thief.min.js">
</script>

然後用以下語法來得到圖片的主要代表色:

myImage = $('#myImage');
var colorThief = new ColorThief();
colorThief.getPalette(myImage, 8);

其中的 8 就是表示要取出圖片八個主要代表色,同理你要取出十個主要代表色,就改成 colorThief.getPalette(myImage, 10) 就可以了!很簡單吧!!

如此我們就可以使用 Color Thief 取出的第一個主要顏色來畫背景及遮罩、第二個主要顏色畫字體完成第二版的 iTunes 11 封面背景效果,這樣的效果就已經很不錯了!

第二版成品展示

Step 3:調整、調整、再調整

從第二版的 iTunes 11 封面背景效果展示中,其實我們已經得到了不錯的效果,但我們會發現有些地方會怪怪的,比如:

這個封面中,Color Thief 取出的第一個代表色是灰色,所以造成了我們不想要的結果,但其實又不能說是 Color Thief 或是 Color Quantization 演算法的錯,因為這張封面確實有蠻多像素是屬於灰色系列的。

我們認為較好的結果就是讓專輯資訊區塊的背景色及遮罩能和封面的背景色是類似的,在這個例子裡我們希望得到的是米分糸工色的!我們開怎麼辦呢?

我們可以做的就是去調整演算法,讓 Color Thief 取出代表色時只算封面中屬於背景部份的像素!感覺很直觀嘛!

問題在於…

請翻譯翻譯他媽的要怎麼告訴程式只算封面背景部份的像素啊啊啊啊!!!!

其實找出圖片中屬於背景的部份這個問題我們並不是第一個遇到的,這個問題也已經探討很久了,目前也有許多方法被研發出來,有很多方法甚至牽涉到機器學習領域的研究,我們這邊當然也可以用這些方法來解,但我就不引用這些方法了,我們可以利用一個更直觀的方法來完成!

我們可以再觀察一下 iTunes 11 的封面特效,我們可以發現背景色的遮罩效果會與封面的上半部及左半部溶在一起,那我們可不可以動一些手腳來讓 Color Thief 只計算封面上半部及左半部的像素呢?當然可以啊!

所以我們就以這樣的想法對 Color Thief 做了一點 Hack,修改的語法大致如下:

for (var i = 0; i<image_data.length; i=i+4) {
    r = image_data[i + 0];
    g = image_data[i + 1];
    b = image_data[i + 2];
    a = image_data[i + 3];

    if ( i<(image_data.length*0.30) || (i%(image.width*4))<(image.width*0.30) ) {
        bg_image_data_array.push([r, g, b]);
    }

}

var bg_cmap = MMCQ.quantize(bg_image_data_array, 5);
var bg_palette = bg_cmap.palette();

其中 i<(image_data.length*0.30) 就代表圖片中上面 30% 部分的像素資料,(i%(image.width*4))<(image.width*0.30) 就代表圖片中左邊 30% 部分的像素資料,這樣就可以讓 Color Thief 只計算封面上半部及左半部的像素了!

像這樣的方法在學術上就稱為 Heuristic Algorithm,以最直觀的方式來設計演算法,雖然可能不會得到最佳解,但常常能得到一些不錯的效果!

如此我們就可以使用 Hack 調整過後的 Color Thief 取出的第一個主要顏色來畫背景及遮罩、第二個主要顏色畫字體來完成完全體的 iTunes 11 封面背景效果,感覺一切都對了啊!!!

完全體成品展示

結語

關於這個主題,我有製作 HappyDesigner Mini 分享會 #3 時使用的投影片,投影片連結在此,有興趣的人可以參考看看。

我們這邊完整說明了如何做出網頁版 iTunes 11 的封面背景特效,使用了許多第三方的函式庫來幫助實作,也可以在這樣的練習中學習如何一步一步的完成我們最終想完成的目標。

其中也發現了許多可以精進的地方,例如取得主要顏色的演算法、機器學習自動偵測圖片背景部份這樣的問題,若要取得更好的結果,就是要更深入去研究相關演算法來得到更令人滿意的結果,而演算法這個領域其實如同偉大航道的新世界一樣充滿驚奇啊!未來有機會更深入研究的話希望也能跟大家分享~

前一陣子大家非常瘋 Parallax Scrolling 網頁,主要是利用人們瀏覽網頁時最習慣的動作「滾動」來做一些特效,讓使用者透過簡易的滾動就能瀏覽完整個網頁。

Parallax Scrolling 中文翻成視差滾動,wiki 上的定義上說明這是電腦圖學中一種特別的滑動特效技巧,原理是把背景圖片的移動速度放慢,讓前景圖片移動較快,因而在2D畫面上產生多層次的佈景深度。

但說了這麼多,不如還是透過實際的例子來感受一下什麼是 Parallax Scrolling,20 Best Websites with Parallax Scrolling of 2013 中就有許多有趣的例子!

如果仔細去研究這些例子的原始碼就會發現,要做這樣的網頁實在很費工,如果可以的話當然想找找有什麼方法可以快速的做好一個 Parallax Scrolling 網頁,於是就在 github 上找到了 skrollr

skrollr 的使用方法真的非常簡單,步驟如下:

Step1:引入函式庫到網頁中:

<script type="text/javascript" src="/path/to/skrollr.min.js">
</script>

Step2:在網頁底端初始化 skrollr

<script type="text/javascript">
    var skrollr_obj = skrollr.init();
</script>

Step3:利用以下語法來安排網頁中元素的轉場

<div data-0="background-color:rgb(0,0,255);" data-500="background-color:rgb(255,0,0);">
    WOOOT
</div>

上面語法的意義就是使用者滾動位置從 0 滾動到 500 時 div 的 CSS 樣式變化,也就是說使用者滾動位置到 500 時,div 的背景色會從原來的藍色慢慢變為紅色。

如果要做淡出功能可以這樣寫:

<div data-2100="opacity: 1;" data-2400="opacity: 0;">
    <img src="/public/image/show-case/skrollr-demo/cell.png">
</div>

如果要做漸漸模糊功能可以這樣寫:

<div data-2100="-webkit-filter: blur(0px);" data-2400="-webkit-filter: blur(5px);">
    <img src="/public/image/show-case/skrollr-demo/cell.png">
</div>

以此類推,當然我們也可以寫 data-100 至 data-1000 的 CSS 樣式變化,因此我們可以很方便的安排網頁中元素的轉場,做出簡易的 Parallax Scrolling 網頁。

這麼簡易好用,應該所有剛接觸網頁設計的人都會用吧!所以我就現學現賣做了一個 天下第一武道大會 網頁!小時候的回憶湧上心頭啊!

會踩雷的地方請特別注意

撰寫 CSS 轉場變化時要特別注意,每一個階段的 CSS 樣式一定要一致,舉個例子來說,當某個階段的 CSS 樣式有 opacity: 0;-webkit-filter: blur(0px);,其他階段的 CSS 樣式也一定要有 opacity: *;-webkit-filter: blur(*px);,否則會得到非預期的結果。

例如這樣是錯的寫法(在 data-2400 少寫了 opacity 的樣式):

<div data-2100="opacity: 1;-webkit-filter: blur(0px);" data-2400="-webkit-filter: blur(5px);">
    <img src="/public/image/show-case/skrollr-demo/cell.png">
</div>

這樣才是正確的寫法(data-2100 有寫到 opacity, -webkit-filter,data-2400 就要寫到 opacity, -webkit-filter):

<div data-2100="opacity: 1;-webkit-filter: blur(0px);" data-2400="opacity: 0;-webkit-filter: blur(5px);">
    <img src="/public/image/show-case/skrollr-demo/cell.png">
</div>

送行者是我蠻喜歡的一部電影,但若要我詳細描述這部電影,或是告訴你我從這部電影得到了什麼體悟,我一時也難以說明;看電影就是一種感覺嘛!我就是喜歡這部電影啊!說出來就不好玩了嘛!所以我會建議直接去看電影,親自感受!

看這部電影時,有好多地方會讓人忍不住想流淚,會將電影中的情景對應到自身為親人送行的情景,總覺得台灣傳統的喪禮無法讓人能好好地從悲傷中平復,人們總是在喪禮之後才隨著時間忘記傷痛。

看這部電影某種程度是在自我療癒。

對這部電影印象最深的一幕就是葬儀社員工在聖誕節時一起吃著炸雞喝著酒的那一幕,這幕的時間非常長,而且還一直拍特寫,每個人都不顧形象的張口大吃,大家一口接著一口地吃得津津有味,狼吞虎嚥的聲音一直「咕嚕」「咕嚕」的震天作響,看著看著不知不覺自己也會開始流起口水想吃炸雞,正當要幹譙導演亂拍的時候,忽然開始對這一幕深深著迷,霎那間讓人在心裡呼喊:「啊!原來這就是活著的感覺」

電影中有蠻多地方會用類似這種生與死的象徵,讓人感覺死去與活著的區別,但這一幕是最長的,看完這段時讓我一時陷入沈思,或許是對生命如此卑微而感嘆,抑或是對自己也還能夠這樣大口吃炸雞感到慶幸!我沒想到狼吞虎嚥的「咕嚕」「咕嚕」聲也能這樣帶給我衝擊啊~

ice dog

難怪星爺的電影裡會說「越快升天就越應該要拼命吃」了 XD

在開發網站的時候,我們至少會有一個正在開發中的開發環境,即真正上線開放給使用者使用的正式環境,通常我們會使用類似 git 的版本控制系統開一個 dev branch 及 ㄧ個 master branch,分別對應到開發環境及正式環境。

所以在 Heroku 上,我們也會希望開一個給使用者使用的 Heroku app(正式環境),另一個就是線上開發版的 Heroku app(開發環境),開發者可能在自己的 local 端開發完之後,將自己的開發的成果 merge 到 dev branch,我們就可以看在線上開發版的運作情況,沒問題了我們才會發佈到正式環境。

首先我們需要先 create 兩個 Heroku App,這邊我們以 Laravel 專案為例:

Step 1:新增 Heroku App

$ heroku create my-laravel-project --buildpack
// 新增正式環境 Heroku Laravel App
$ heroku create dev-my-laravel-project --buildpack
// 新增開發環境 Heroku Laravel App

Step 2:將 dev branch 專案發佈到開發環境

$ git config remote.heroku.url "[email protected]:dev-my-laravel-project.git"
$ git push -f heroku dev:master

Step 3:將 merge 好的 master branch 專案發佈到正式環境

$ git config remote.heroku.url "[email protected]:my-laravel-project.git"
$ git push heroku master

如此就可以視情況將 dev branch 發佈到 Heroku 開發環境、master branch 發佈到 Heroku 正式環境,這樣就不會讓正在開發的功能影響到獻上的使用者了。

目前最火紅的 PHP Framework 就是 Laravel 了,以往 PHP Framework 的缺點就是沒有一個熱絡的社群,Laravel 的出現漸漸改變了這樣的現象,Laravel 社群比起其他 PHP Framework 的社群熱絡多了,雖然比起 Rails、Django 及 Node.js 確實還是差了一大截,但總是好現象。

由於看好它的發展性,目前有一些 Side Project 是用 Laravel 來實作,這些 Side Project 如果沒有必要實在是不太想碰機器或者安裝環境,所以發佈到 Heroku 是最好的選擇,只要發佈到 Heroku,Heroku 就會幫忙安裝好所有需要的環境。

步驟如下:

Step 1:使用 CLI 在 Heroku 上開啟一個可以 Build Laravel 的專案

$ heroku create my-laravel-project --buildpack https://github.com/winglian/heroku-buildpack-php

Step 2:在 Laravel 的 Project 資料夾內發佈專案到 Heroku

$ git push heroku master

有時 Heroku 發佈專案會失敗,基本上發佈失敗只要再下一次指令就可能會成功,我也不知道為何有時會這樣,或許是因為是用 Laravel 的關係吧!總之,一次不成功,那就試第二次就對了!

其實還蠻簡單的,還不用管機器,真的很方便~

Heroku 是一個 PaaS 雲端服務,可以讓開發者快速在雲端上放上自己開發的服務,使用 PaaS 服務可以在開發初期省下不少資源,若目前的開發專案沒有使用到 Heroku 沒有支援的功能,使用 Heroku 是一個很好的選擇。

使用 Heroku 所需要建立的環境步驟如下:

Step 1:註冊 Heroku 帳號

Step 2:安裝 Heroku toolbelt

Step 3:測試使用 Heroku CLI 登入

$ heroku login
Enter your Heroku credentials.
Email: [email protected]
Password:
Could not find an existing public key.
Would you like to generate one? [Yn]
Generating new SSH public key.
Uploading ssh public key /Users/adam/.ssh/id_rsa.pub

如果可以成功,就代表安裝已經完成

Step 4:新增 SSH Key

要 push project 到 Heroku 需要使用 SSH key,如果沒有 SSH key 的話,可以用以下指令新增一個 SSH key

$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/adam/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in   /Users/adam/.ssh/id_rsa.
Your public key has been saved in /Users/adam/.ssh/id_rsa.pub.
The key fingerprint is:

Step 5:將 SSH Key 新增到 Heroku 帳戸

$ heroku keys:add
Found existing public key: /Users/adam/.ssh/id_rsa.pub
Uploading SSH public key /Users/adam/.ssh/id_rsa.pub... done

Step 6:將現有專案 deploy 到 Heroku

$ cd my-project
$ heroku create my-project
$ git push heroku master

如此就可以建立好 Heroku 環境,並且將自己的專案發佈到 Heroku 的雲端環境,對於機器不熟的人,用 Heroku 其實還蠻方便的。

Fukuball

我是林志傑,網路上常用的名字是 Fukuball。我使用 PHP 及 Python,對機器學習及區塊鏈技術感到興趣。 https://www.fukuball.com

Co-Founder / Head of Engineering at OurSong

Taipei, Taiwan