ruby on rails

ruby on rails

在Rails當中存取Google AdWords API

目標 利用Google AdWords API讀取AdWords帳戶內的廣告活動成效資料。 1. 選定一個帳號 選定一個你要存取Google AdWords API的帳號,由於申請API需要人工審核,因此需要使用這個帳號提出申請,以下皆稱此帳號為「選定的帳號」。 2. 註冊Google Cloud憑證 英文流程在Github上有記錄 簡單來說: 1. 在Developer Console當中建立一個新的專案 2. 在「憑證」項目底下建立一個用戶端ID 3. 選擇「已安裝的應用程式」,並選擇「其他」 最後會取得畫面上出現的「用戶端ID」和「用戶端密碼」,記好,晚點會用。 3. 註冊AdWords使用者權杖 1. 進入AdWords 2. 點擊右上角的齒輪,選擇「帳戶設定」 3. 如果你的權限可以管理此帳戶的所有廣告,左邊bar會出現一個「AdWords API中心」選項,

ruby on rails

form_tag 是啥?跟 form_for 有什麼不一樣?

一般在Rails的app當中,常會看到form_tag的用法,基本上就是為了傳送http的POST request使用,就像我們在瀏覽器中直接輸入網址就可以發出GET request一樣。 form_tag 基本上,一個form_tag會長這樣: <%= form_tag sessions_path do %> <% end %> 這樣基本的code就會產生: <form action="/sessions" method="post"> </form> 簡單來說,我們就是在這樣的表格中送出需要的變數。例如一個登入表格: <%= form_tag sessions_path do %> Name: <%= text_

ruby on rails

影片教學課程 RSpec-Rails (基礎篇) 上架

RSpec課程來囉!從5/10開始錄製,到6/4終於完整上架、發佈,算是我第一個比較完整的Ruby相關課程。希望大家多多支持喔! 課程簡介 RSpec是一套Ruby語言底下的自動化測試框架,主要用於測試程式執行是否符合我們想要的結果,可在實際手動執行之前先讓程式自動進行測試,節省開發和維護的時間。 由於RSpec強調其寫法非常口語化,有別於一般的測試語法,又稱BDD(Behaviour driven development)開發框架,意思是開發者可以將RSpec視為一種規格撰寫的說明書。在實際開發之前先將規格寫好,像是說明書一樣,接著再照這份「說明書」進行開發。這也是為何RSpec要將自己的每一個測試單元都稱為「specification」,字面上就是「規格」的意思。 RSpec算是Ruby語言當中非常受歡迎的測試框架,與另一套Cucumber同樣都強調其語言表現方式非常自然。假如想要了解RSpec到底如何能夠幫助開發者,一起來看看教學影片吧! 教學內容 本系列教學會說明: 1. 在Rails當中要如何使用RSpec撰寫測試 2. 使用RSpec測試scaf

rspec

RSpec-Rails (基礎篇)(7): 撰寫整合測試

RSpec-Rails教學(基礎篇)全部內容 單元測試(Unit test)和整合測試(Integration test)的差異。 1. 單元測試針對程式的各個最小單位進行測試,在Rails當中通常測試的最小單位是method,要確保每一個method的內容都可以順利進行。尤其抓錯字在unit test中非常重要!可以省下非常多時間!(本人親身經歷) 2. 整合測試主要是看大方向,通常直接從網址進行GET或帶入變數,確保回傳的結果是正確無誤的。 3. 兩種測試一樣重要,如果只有單元測試,我們很容易忽略掉每個class之間互動可能發生的問題。 4. 如果只有整合測試,那發生錯誤的時候會很難抓問題出在哪,難度就跟我們直接下去開瀏覽器測試一樣,實用性較低。 spec/requests/posts_spec.rb require "rails_helper" RSpec.describe "posts", :type => :request do

Rails 用巢狀include和查表方式來避免 n+1 query

先前在用includes和joins避免N+1 query當中有提到,資料庫一直是Rails效能一大殺手,除了瀏覽器下載很肥的檔案會造成效能低落以外,第二個會讓網頁很慢的原因就是資料庫讀取太頻繁(當然如果被牆了那可能又是另一個原因...) 以下介紹兩種稍微複雜一點的情況,使用不同的方法來避免 n + 1 query。 巢狀 include (nested include) 如果我們遇到非常複雜的table結構,關連得非常遙遠,例如: class Post < ActiveRecord::Base has_many :comments belongs_to :user end class Comment < ActiveRecord::Base has_many :replies belongs_to :user end class Reply < ActiveRecord::Base belongs_to

From Hexo to Rails

先前在Why Hexo?這篇文章中有提到,因為先前各種部落格平台和framework的缺點,所以改換使用Hexo這個Blog framework,優點在前面的文章中已經提及,但用了半年之後,遇到一兩個問題... 1. 網址改變 首先是每次產生網站時,Hexo的規則會有所修改,一般來說如果我的文章檔名是: 20140101-hello-world.markdown 那Hexo就會把這篇文章的網址變成是: https://motion-express.com/20140101-hello-world 會將檔案名稱完整的放到網址列上,但不知在哪個版本之中,Hexo把網址改成: https://motion-express.com/hello-world 這樣的改變重點在於SEO的效果整個蒸發掉了,而且愚笨的我是在已經網址改變不知道幾個禮拜之後才發現這件事情,一開始想說摸摸鼻子算了,結果過了不久,居然Hexo又把它改回來!代表這一切又是白做工,Google和Yahoo應該早就討厭我了吧! 2. 認真經營影音內容 除此之外,從兩三年前開始我就想認真經營影音內容,但一

Debugging Rails 使用 better_errors 在瀏覽器中直接進行除錯

上一篇提到在發生錯誤時,要先學會閱讀錯誤訊息。但假如無法一時之間了解發生什麼事,那最好有一個可以操作的平台,讓我們了解現在網頁上的variable及method執行起來是什麼情況。 bettererrors這個gem就是針對Rails在產生錯誤訊息時,提供開發者非常完整的資訊來看看錯誤是發生在哪裡。另外搭配bindingof_caller,可以顯示錯誤發生當下的variable列表。 安裝 在Gemfile中列出以下gem: group :development, :test do gem 'better_errors' gem 'binding_of_caller' end 並在command line 中執行bundle進行安裝。 之後再遇到錯誤畫面,會變成以下樣貌: 1. 檢查 stack trace 找到自己的檔案 首先,左邊是一整串檔案列表,跟先前提到的邏輯相同,是整個Rails的檔案列表。進階開發者可以查看整個邏輯,方便debug,初階開發者建議點選左邊的Application Frames並找到自己輸入的檔案即可,因為90%的

Debugging Rails:了解9個常見的錯誤訊息

身為一個開發者,與bug對抗根本是每天必備功課,而Rails也有非常完備的除錯(debug)方式可供使用。包括幾個強而有力的gem:better_errors、debugger、pry等等。 不過!在使用這些強大的debug工具之前,是否有遇過根本連錯誤訊息都看不懂的情況呢?筆者自己剛開始開發Rails時有些錯誤訊息還要先上google去查才能得到解答。在這裡整理了9個常見到的錯誤以及可能原因,假如大家都能熟悉這些錯誤,以後遇到bug時就可以準確的知道錯誤出在哪裡囉! 1. NoMethodError: undefined method method是Ruby當中所有利用def...end定義的方法都叫method,這段錯誤訊息的意思是你呼叫了一個method,卻沒有定義這個method。通常是由幾個原因造成的: (1)打錯字 最常出現的狀況是例如我們要把user的名字輸出到view當中,卻在view當中指定錯名稱。例如: # controller @user = User.find(params[:id]) View檔案中寫: <%= @user.namm

將Rails佈署(Deploy)到VPS上

一般來說,Rails佈署是非常麻煩的事情,尤其整個技術的變遷實在太過快速,很多網路上的資料都舊了。自己最近在研究佈署,發現很多資料都已經過期,在這邊彙整自己將Rails佈署到VPS上的心得。以下示範的是非常精簡的版本,沒有效能調教、沒有安全措施,基本上就只是個能動、稍微對Ruby增加一點彈性的佈署結果。如果有需要更深入的佈署,網路上有非常多關於主機調教的教材。 本機環境:Mac OSX 10.9 Capistrano版本:3.4.0 VPS主機:Digital Ocean 遠端主機作業系統:Ubuntu 14.04 遠端Ruby版本:2.2.0 遠端Rails版本:4.1.2 遠端資料庫:mysql Web Server:nginx App Server:passenger 0.登入VPS 首先,在Digital

ruby on rails

Rails修改預設顯示格式為json

在Rails當中撰寫controller時,一般都是用respond_to來調整輸出的格式,讓使用者可以自由選擇。例如常見的一般html及json兩種格式: respond_to do |format| format.html { redirect_to @post } format.json { render :show, status: :ok, location: @post } end 這樣不管是連結到html頁面,或是指定輸出為json格式,都可以輕鬆應付。 不過有時我們希望整個controller都是輸出成json格式,不需要html,則可以用幾種方式處理: 1. 直接輸出json格式 一般來說要指定輸出json,都必須在網址列上輸入https://example.com/posts.json,在結尾加上json才會有json格式出現。 如果要強制html輸出成json格式的話,只要在controller action結尾撰寫如下: render :json => @posts 就會將@posts輸出成json格式。 2. 指