2017年5月29日 星期一

find_each & find_in_batches 用法介紹

寫在開始之前


Rails提供了蠻多好用的方法可以使用,只是很多時候不知道有這些方法,然後又自己繞了一圈去實作相同的方法。今天要講的是find_each & find_in_batches 這兩個批次處理的方法。所謂的批次處理代表的是不要一開始就將所有要處理的記錄一次拿出來,而是分次拿出來處理,如此一來最大的好處就是「節省記憶體」,但原理是?

當我將記錄從資料庫提取出來時,其實就是將「記錄全部實例化放在記憶體裡」,所以當紀錄的量愈大時,所佔用的記憶體就會愈大。因此如果量大到一個程度的話,結果就是...你知道的XD

想像一個情境,今天你架了一個部落格網站,裡面已經有了幾千篇的文章,而你需要修改其中一個欄位的值,那你該怎麼做?可以寫一隻rake,裡面呼叫所有的文章,並修改需要修改的欄位值,如何實作?讓我們繼續往下看。


2017年4月23日 星期日

2017年1月10日 星期二

Ajax+Devise+Foundation實作Popup註冊頁面

寫在開始之前

這次的主題是想搭配devise gem做出popup式的註冊頁面,效果可以參考Airbnb。而其中的實作又會涉及到ajax的使用,這樣的做法是希望將使用者輸入的資料透過javascript進行非同步傳送至後端,再將結果回傳至前端讓我們判斷下一步要做什麼,例如成功註冊就將會員導至首頁,註冊失敗就顯示出失敗的訊息。
看完這份教學,你會了解:
  1. 用現成的foundation gem快速產生popup頁面(gem裡面稱做Reveal)
  2. Hack原本devise gem的預設controller、方法與頁面(這部分比較麻煩ˊ ˋ)
  3. 使用Ajax傳資料、塞資料
  4. 使用Rails-i18n gem搭配model翻譯訊息
註1:devise gem很強大,他從頭到尾幫你把整套使用者認證包好了,也就是說註冊、登入都是使用他預設的頁面,成功或失敗後會做什麼事情也是他幫你預設好。這部分就是我們要去hack的地方,將頁面、行為客製化,改成符合我們需求的樣子。
註2:ajax最重要的就是資料的拿取跟傳送,當你能拿到對的資料,基本上就已經完成九成了。
註3:Rails-i18n,太重要的一個功能!能幫我們翻譯訊息成中文,對於資料驗證後的錯誤訊息顯示有很大的幫助。

    2016年6月17日 星期五

    Ruby on Rails 筆記 — 部署(Deploy)網站於Amazon EC2 # Part2:使用Nginx+Passenger部署




     I. 寫在開始之前
    在看Part2的同時,相信大家都已經根據Part1完成AWS帳號註冊以及伺服器的建立了!接著我們就要在伺服器上嘗試手動部署,也就是在Amazon EC2上使用Nginx+Passenger建立一個部署的環境,並將Rails網站部署在該伺服器上。

    Nginx是目前最流行的網站伺服器之一,其運作效率高;而Passenger是一套Apache和Nginx的擴充模組,在部署Ruby on Rails上設定較為簡單,因此選擇兩者進行網站的部署。

    2016年5月18日 星期三

    Rails求職過程心情筆記


    沈寂了好一陣子沒有來紀錄自己的程式筆記,原因是3月多都在找工作,花了很多時間面試、東奔西跑,所以寫程式的時間就減少了,也比較沒有時間整理筆記PO上來;然後在4月時找到工作了,進入新公司有好多需要適應、磨合還有學習的,因此也是花很多時間讓自己跟上整個團隊的腳步,所以也比較沒心力整理筆記(但是其實都有紀錄下來),接下來漸漸上軌道之後應該就會繼續經營這個部落格了!

    2016年3月14日 星期一

    Ruby on Rails 筆記 — 部署(Deploy)網站於Amazon EC2 # Part1: AWS註冊 & 架設Server




    I. 寫在開始之前

    Amazon EC2為一個雲端的運算平台,可以讓我們在上面架設server並部署網站,也就是所謂的IaaS(Infrastructure as a Service),相對於前面部署於Heroku[1]上則是屬於PaaS(Platform as a Service)。兩者的概念是不太相同的,IaaS等同於我們擁有一台虛擬主機,能做的事就跟你在自己電腦上能做的事一樣;而PaaS是很固定的執行環境,你只能在上面部署特定支援的語言或框架的網站,而不能做其他事。更詳細的說明可以參考ihower網站佈署[2]一章。

    在使用Amazon['æməz,ɑn] EC2的服務之前當然要先註冊(音標希望大家都能學會正確念法),註冊完畢後則需要在EC2上建立虛擬實例(Instance),講白話就是開啟一台虛擬主機準備架Server。由於註冊以及建立主機的過程比較固定,因此此篇就直接引用其他前輩寫的教學文,然後輔以一點我在過程中認為要注意的點。

    2016年2月17日 星期三

    Ruby on Rails筆記 — 在文章中直接插入Dropbox裡面的照片



    I. 寫在開始之前

    要製作自我介紹頁面時想到了這個問題,如果可以把照片放在dropbox裡,然後直接從網站連結的話勢必可以節省不少空間。如果有興趣的朋友就繼續往下看囉!

    2016年2月3日 星期三

    Ruby on Rails 筆記 — 後端Rails當API + 前端AngularJS



    I. 寫在開始之前

    對Rails有了基本的認識,以及實作過一兩個小專案後,在朋友的推薦下,決定嘗試把Rails當作API使用,並且搭配AngularJS[1],也就是所謂的前端JS框架進行開發。簡單來說Rails的功能變成只有儲存和讀取資料庫裡的資料,也就是所謂的後端;而在前端的各個view和controller都由AngularJS來完成。因此最重要的重點就是如何在前後端相互傳資料,以及如何配置AngularJS。

    2015年11月26日 星期四

    Ruby on Rails 筆記 — 在Ubuntu14.04部署(Deploy) Ruby on Rails網站於Heroku



    I. 寫在開始之前 (對於部署概念很熟的朋友可以直接跳第II部份)

    會來搜尋這篇的朋友應該都是將Ruby on Rails的CRUD做的差不多,有一個小網頁想deploy到網路上看看效果如何~對於部署這件事我也是搞了很久才漸漸了解,所以想要先敘述我所理解的部署(有錯誤或疑問歡迎指正或提出來討論!畢竟我講的不一定完全正確XD),讓初學者能對這件事有更加深刻的認識。

    在網頁開發(Development)階段,也就是我們在練習CRUD、各種controller, model,view coding的時候,那時我們所看到的網頁(輸入localhost:3000後可以看到的~)都是使用一套稱為WeBrick的伺服器(Server),是一套純Ruby實作的HTTP伺服器,其效能適合開發階段,但不適合真正網站使用。當我們最終完成網頁想要放到網路上供大家瀏覽時,我們需要透過另一套適合Production的伺服器來幫我們實現網站的部署。

    2015年11月12日 星期四

    Ruby on Rails 筆記 — Pismo:輸入網址(URL)抓取網頁標題(Title)



    I. 寫在開始之前

    會使用此功能主要是想寫一個收集各地餐廳的網頁,想法是使用者找到食記之後可以藉由貼網址的方式抓取該篇食記的標題,省去還要複製標題(title)的麻煩(有網址可以順便建立連結,讓對該篇食記有興趣的使用者能直接連過去)。
    關於抓取網頁標題其實有一些套件可使用,例如mechanize[1]以及pismo[2]等,一開始還試過用open-uri[3] 進行網頁的讀取再抓資料,但後來一直有編碼和其他問題只好作罷。本篇使用的是pismo套件(gem),能夠抓取網頁中的title, feed URL, lede, author, keyword, datetime等等,功能算是蠻齊全的,如果想進一步了解可以至pismogithub[2]看。