rails Use puma-dev as Rails Server on Development Environment 承 iCook 的用 Puma-dev 作為 Rails 開發環境伺服器分享,這邊分享個小資訊。 如果有裝 better_error 以及 binding_of_caller 這兩個 gem 協助 debug 的話,用 rails s 跑當出錯時會非常非常的 lag,根據他們的 issue 討論,請使用 puma 指令把 server 跑起來即可,甚至 binding.pry 也可以喔~
rails [Tutorial] how to dump and restore postgresql from production env on AWS EC2 for Rails 自從機器從 heroku 搬到 AWS 上後,資料庫的備份再也不是容易的事情惹,中間牽扯到 firewall, VPC, postgresql version 等等的問題,有點被 heroku 寵壞。過了一年多,終於有時間好好正視這個問題處理一下,不然常常很多特殊交易狀況都無法在開發環境被還原。 雖然找到許多的 gem 可以協助做這件事情,但用起來都不符合需求,後面再來提。最後還是用最土砲的方式:rake task 加上 postgresql cli 搞定。 資料庫版本 第一個會遇到的問題是資料庫版本不符合,RDS 用的 postgresql 是 9.5,但透過 opsworks 建的 ubuntu 環境 postgresql
rails has_many through association records duplication problem with Subquery solution Rails 有非常完整的 ORM 機制,也是許多網站框架還難以超越的部分,其中的 has_many, has_one, belongs_to 等等的 association 拯救了不知多少工程師的白頭髮,讓大家少花了多少打 SQL 語法的歲月.....但近期著實被 has_many through 狠狠地上了一課,主要是 join 導致加總了重複的紀錄,使得金額與數量計算上出現大幅的落差。 先簡述一下我們的系統,就是一個電商架構的網站,其中 Transaction 與 TransactionItem 用來記錄每一筆交易買了哪些商品,那每個專案則理所當然的透過 transaction_items 來去找到 transaction_record 加總金額,即可知道共收到了多少錢。 (這邊姑且先不探討關聯設計上的問題,先針對
rails Fix ahoy no implicit conversion of Hash into String Someone got some trouble "no implicit conversion of Hash into String" after upgraded properties field from json to jsonb type in Ahoy. Or you can follow this issue#86 or issue#120. There is a easy way to fix it. Just add
rails Rails4 Patterns III: Concerns Concerns 是 Rails 拿來做模組化的一個方式,在 Rails4 之後也正式在 app/models/ 內有了 concerns 這麼一個資料夾的一席之地,也是一種 Rails Convention。 把重複的 Model 程式碼搬到 Model Concerns 內## 留言功能在臉書不斷的演進下,似乎已經成為現在網站的一個基本盤功能,什麼內容都可以討論一下。Rails4 Patterns 裡面拿這個當做範例,覺得蠻適合的。 # app/models/post.rb class Post < ActiveRecord::Base has_many :comments, as: :commentable def comments_
rails Raiils4 Patterns II: Class Methods and Scopes Extracting Queries # app/controllers/posts_controller.rb class PostsController < ApplicationController def index @posts = Post.where('published = ? AND published_on > ?', true, 2.days.ago) end end 這是 controllers 內會常見的程式碼,以結果來說完全沒問題,但考量到維護性與可讀性,有可以改進的地方: 在 controllers 內做了太多細節 容易產生不必要重複的程式碼 測試較難撰寫 改進後 # app/controllers/posts_controller.
rails Rails4 Patterns I: Models 今天起春節希望每天介紹 Rails4 Patterns 內的一個章節給大家,這是一個在 Code School 的課程,原址:https://www.codeschool.com/courses/rails-4-patterns 肥肥的 Controller 是不好的 原因有幾個: 會難以理解 商業邏輯難以統整 程式碼間容易衝突 難以開發新功能 像是以下程式碼 class ItemsController < ApplicationController def publish if @item.is_approved? @item.published_on = Time.now if @item.save flash[:notice]
rails How to Gemify Assets for Rails in 4 Steps 把 assets 包成 rails 的 gem 非常簡單,只要簡單4個步驟!(更多 rails assets gems 請參照 rails-assets) 1. Create Gem Framework bundle gem momentjs-rails 2. Start Your Engine bundler 產生的 gem 是一個標準 ruby 模組,但我們希望他是 rails engine # lib/momentjs-rails.rb require "momentjs-rails/version" module Momentjs
rails Awesome Rails Gem awesome-rails-gem 前陣子整理的 gem 上了 rubyweekly,也算是生活中的小確幸吧!當時只是單純的想法,簡單整理了一下去年一路走來,在開發 rails 專案上學到的這些 gem,也沒想過會變成這樣 XDD 過去因緣際會碰過不少程式語言,但這些過往,確也成為去年開始重新接觸 Ruby on Rails 這個框架的意識阻礙,嘗試用過去一些功能撰寫上的 tricky 想法理解這個框架背後的設計。直到一再又一再的發現很多 gem(前人做過 best practice 的可再利用套件),一再又一再的改架構,覺得怎麼寫更好的過程,有種驚醒將過去意識拋下重新體會 Rails 的藝術。 或許這些 gem 整理沒辦法表象 Rails 的設計巧思(大概得從 rebuilding rails 這本電子書中才能深刻體會)
rails Rails Gem List In this year, we go through over 10 rails projects. Rails is a awesome framework design for web development. And the community grows stronger. In the initial stage, we often reconstruct and redesign db schema on our projects, because we found feature related gems
rails Rails' rescue_from 例外處理 正常在實作 Rails 的 show action 時都會是: @post = Post.find(params[:id]) 根據傳入的 id 用 find 去找到物件,但若沒有這個 id 的紀錄呢?就會跑出 ActiveRecord::RecordNotFound 的錯誤,是錯誤喔不是 warning 而已 但其實這事情也不是挺嚴重,可能就不小心打錯 ID 或是被爬蟲亂爬導致,不算是 bug,只是沒有特別處理(尤當裝 rollbar 後,一直累計噴錯也不是辦法...) 那 rescue_from 是 ActiveController 裡面非常有用的一個函式,可以在一個
rails rails turbolinks 實務小記 承接上篇文章,若對於 rails turoblinks 還不知道是什麼,可以參考此文:Rails Turbolinks & PJAX。這篇條列幾點在實作 rails turbolinks 時要注意的事項: 只有 <body> 的內容會被更動 Rails Turbolinks 目前版本只有 <body> 與 <title> 的內容會被更動,為什麼說「目前這個版本」?因為今年底前 turbolinks 第 3 版應就會隨著 rails 5 一起被 release,屆時將會有非常非常大的變動...可參考 turbolinks
rails rails cookie/session cross all subdomains rails 目前整個 cookie/session 機制搭載的是 activerecord-session_store 這套 gem,設定檔是在 config/initializers/session_store.rb 內。 以目前開發中的專案設定為例: Rails.application.config.session_store :cookie_store, key: Rails.application.secrets.secret_key_base 對於 cookie/session 的機制而言,這像是個 key-value store,但以我們丟進去的 key 作為加密(不然網站早就都被 hack 光光
rails Rails 3 種做到 eager loading 方法 開始前簡單介紹一下什麼是 Eager Loading 什麼是 N+1 Query,Eager Loading 出現主要是為解決 N+1 Query。N+1 Query 像是這樣: # controller @posts = Post.publish.take(10) # view <table> <th>標題</th> <th>簡介</th> <th>
rails Rails Turbolinks & PJAX 前陣子在接觸 rails turbolinks 時想說 turbolinks 怎這麼 suck,光是 GA、Facebook Pixel 等 tracking script 無法正常運作就讓人十分頭痛(當時直接怒拔...),但在最近因為看了這篇文章 瞬間懂了。 Turbolinks 是在 Ruby on Rails 4.0 被默認的一個 gem,當時(2013年)很多人在分享時都搭上一句標題「Turbolinks for Rails (like pjax)」。那什麼是 pjax?turbolinks?更詳細解說可看上述提及的文章,這邊就針對一些所獲的重點摘錄做分享。 講什麼是 pjax 跟 turbolinks
ruby Ruby's Exception vs StandardError: 有什麼不一樣? 參考源於此:http://blog.honeybadger.io/ruby-exception-vs-standarderror-whats-the-difference/ 「Never rescue Exception in Ruby」 或許你可曾聽過這句話,但若不知道 Exception 與 Standard Error 的差別還真是讓人摸不著頭緒。 通常我們會在 Ruby 這樣 rescue exceptions begin do_something() rescue => e puts e # e is an exception object containing info about the error. end 但在看到這張表後馬上明白為什麼不能這樣寫 Exception
ruby Ruby on Rails - Cool stuff & tips Arrays: map & each_with_index 在跑陣列(array) for-each 每一個 interation 可以帶上相對應的 index,利用 each_with_index 這個方法: ['a', 'b', 'c'].each_with_index do { |item, index| puts "#{index}-#{item}" } 當然,我們也可以利用 index 對應到的 element 組成一個新的 object: ['a', 'b', 'c'].each_
ruby [Troubleshooting]incompatible character encodings: UTF-8 and ASCII-8BIT 最近把放在heroku上的rails專案,其上傳檔案paperclip的storage改至S3上,當一上傳中文檔名便會發生"incompatible character encodings: UTF-8 and ASCII-8BIT"這樣的編碼問題。若錯誤訊息是"... ASCII-8BIT and UTF-8",則解法1的編碼需改成UTF-8。 解法1(適用於筆者) 註:在處理上傳的params前加入這兩行,team為該model name,avatar為檔案上傳的名稱,可依照需求自行修改。 params[:team][:avatar].original_filename.force_encoding('ASCII-8BIT') params[:team][:avatar].headers.force_encoding('ASCII-8BIT') 解法2 針對config/
ruby Install Redmine with Nginx, RVM, MySQL on Ubuntu Server 12.04 LTS 在安裝Redmine前先去官方文件確認相關版本資訊與限制。可得知: Ruby版本支援:ruby 1.8.7, 1.9.2, 1.9.3 Rails版本需要:2.3.14 "Ruby 1.9 is not supported yet. You have to use Ruby 1.8.x as stated above.",故Ruby還是先安裝1.8.x較保險。 其他限制因此處安裝Redmine最新版不需擔心。 RVM Ruby 1.8.7
command [Note]heroku 指令記錄 # creating app on heroku need to with --stack cedar for rails 3.2 and ruby 1.9.3 heroku create # create a new app on heroku heroku login heroku keys:add ~/.ssh/id_rsa.pub # upload the public key to heroku server for uploading
TroubleShooting Error : cache: [GET /admin] miss" on Heroku 最近將Rails專案(3.2 with ruby 1.9.3)放置heroku發生了/admin 連結miss的問題,查了很久發現不是rails_admin的問題,而是cancan這套認證gem的問題。 解決方法 1. 將application_controller.rb內的cancan設定改成: {% codeblock lang:ruby %} rescue_from CanCan::AccessDenied do |exception| redirect_to root_url, :alert => exception.message end 2. 在routes.rb內的root :to => "
Homebrew [Solved] libreadline.6.2.dylib (LoadError): when run 'rails console' 如下述錯誤訊息,在執行'rails c'後發生。我猜想是在更新homebrew等package management後導致。 /Users/hothero/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/irb/completion.rb:9:in `require': dlopen(/Users/hothero/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/x86_64-darwin11.1.0/readline.bundle, 9): Library
apache Install Redmine on Amazon EC2(CentOS) 在安裝Redmine前先去官方文件確認相關版本資訊與限制。可得知: Ruby版本支援:ruby 1.8.7, 1.9.2, 1.9.3 Rails版本需要:2.3.14 "Ruby 1.9 is not supported yet. You have to use Ruby 1.8.x as stated above.",故Ruby還是先安裝1.8.x較保險。 其他限制因此處安裝Redmine最新版不需擔心。 Ruby 1.8.7 RubyGems
ruby Install Ruby 1.9.2(Solved error : Error running 'make '") When you try to install ruby 1.9.2 by "rvm install 1.9.2", get the suck error "Error running 'make '". Just like this discussion. Sovled this. You can try a solution on this discussion curl -O ftp:
rails migrate DB from sqlite to mysql for RoR on Heroku 之前做PHP project為了方便建立資料庫,利用rails scaffold快速建立表單放在heroku上讓其他人以便輸入資料,而rails預設資料庫為sqlite,本以為sqlite migrate到mysql很簡單,沒想到有些tricky,在此將步驟整理出來。 步驟如下: heroku db:pull --app appname 先從heroku上把資料抓下來 http://devcenter.heroku.com/articles/taps#export_pull_from_heroku 下載sqlitestudio程式(或其他可export sqlite為.sql檔案的程式) http://sqlitestudio.one.pl/index.rvt?act=docs 利用sqlite軟體(sqlitestudio)讀取sqlite資料並export成sql檔案,路徑為:db/development.