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

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

rails

Rails4 Patterns III: Concerns

Concerns 是 Rails 拿來做模組化的一個方式,在 Rails4 之後也正式在 app/models/ 內有了 concerns 這麼一個資料夾的一席之地,也是一種 Rails Convention。 把重複的 Model 程式碼搬到 Model Concerns 內## 留言功能在臉書不斷的演進下,似乎已經成為現在網站的一個基本盤功能,什麼內容都可以討論一下。Rails4 Patterns 裡面拿這個當做範例,覺得蠻適合的。 # app/models/post.rb class

rails

Awesome Rails Gem

awesome-rails-gem 前陣子整理的 gem 上了 rubyweekly,也算是生活中的小確幸吧!當時只是單純的想法,簡單整理了一下去年一路走來,在開發 rails 專案上學到的這些 gem,也沒想過會變成這樣 XDD 過去因緣際會碰過不少程式語言,但這些過往,確也成為去年開始重新接觸 Ruby on Rails 這個框架的意識阻礙,嘗試用過去一些功能撰寫上的 tricky 想法理解這個框架背後的設計。直到一再又一再的發現很多 gem(前人做過 best practice 的可再利用套件),一再又一再的改架構,覺得怎麼寫更好的過程,有種驚醒將過去意識拋下重新體會

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_

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.