Deploy到Heroku前,將Rails專案從SQLite設定為PostgreSQL
Paas(平台及服務)公司Heroku是個可以把我們寫好的App部署到網際網路的好地方。而本篇是我從自己的上一篇文章:將Ruby on Rails專案部署到Heroku遇到的問題,當時困擾了快兩小時,好在搜尋完解法搞定完後,就興奮地延伸為一篇文章了!
找到點子寫文章果然是遇到bug的最佳副產品!
重點摘要:
- Step1. 修改
/config/Gemfile
- Step2.
bundle install
,再重啟rails server。 - Step3. 部署到Heroku:
git push heroku master
內文:
Heroku的資料庫是使用PostgreSQL,而這篇文章有說明為什麼不用SQLite在Heroku。 但Rails框架在我們的電腦本機
rails new app
設定時,為了初學者快速理解學習,預設是SQLite。 所以如果沒有變更資料庫,直接把Rails push到Heroku上去,就會出現問題。
看完這篇資料庫的文章比較,以一句話來大概解釋比較sqlite與PostgreSQL,sqlite缺乏額外優化性能的靈活性,且同一時間只允許一個寫入操作;可擴展的PostgreSQL提供了可靠性和數據完整性,因此是更好的選擇。
[問題] 我在本機的Ruby on Rails專案所用的資料庫是SQLite,當時還未想到之後會部署到Heroku。
因此,在上篇文章做到Step3 >> 步驟 B. 建立Heroku gem
:修改我的本地資料夾裡的gem file,當我新增一個gem叫做’pg’這個步驟時…
問題出現了!本機遇到的錯誤訊息: No connection pool for ActiveRecord::Base https://stackoverflow.com/questions/38176304/no-connection-pool-for-activerecordbase
[解法]
Step1. 修改/config/Gemfile
Pg
套件,讓我們在Ruby上使用關聯式資料庫PostgreSQL的介面的好幫手。
(Pg套件詳細資料: https://bitbucket.org/ged/ruby-pg/wiki/Home )
我們可以修改rails專案的/config/Gemfile
,加上這幾行程式碼,
讓在Heroku上線時候跑的是PostgreSQL,而在本機的時候還是跑SQLite。
Rails 應用程式預設提供了三種不同的執行模式: development environment:開發模式,用在你的開發的時候 test environment: 測試模式,用在執行測試程式時 production environment: 正式上線模式,用在實際的上線運作環境
group :production do
gem 'pg'
end
group :development, :test do
gem 'sqlite3'
end
或是寫成:
gem 'sqlite3', group: :development
gem 'pg', group: :production
[注意]
gem 'pg'
後面要加逗號,
啊!不然就會向我一樣出現Syntax error…
欣慰的是,用錯誤訊息搜尋關鍵字,發現在stackoverflow上也有人跟我犯過同樣的錯誤 XD
Step2. bundle install
,再重啟rails server。
記得,每次在Gemfile修改套件資料,都要跑bundle install
處理套件相依性問題。
(如果你在本機,想避免安裝任何在production環境下跑的gem,可輸入:bundle install --without production
)
而每次跑完bundle都要先用control+ c
關掉Terminal頁面的伺服器,
再重啟伺服器rails s
之後,如下圖:localhost資料庫的問題已解決了:
但你還是看不到首頁的資料:
Step3. 部署到Heroku:git push heroku master
最後兩步:push!git push heroku master
,
還要跑完heroku rake db:migrate
指令才會生效喔!
(如果轉換資料庫之前有些bug,run指令的時候會提示哪些欄位可能出了問題。)
首頁成功顯示資料庫!
== 後記: 遇到這個bug讓我提早了解跟ruby on rails相關的資料庫概念,是一個很有價值的坑(?)!
如果你想在本機建立rails app的當下,直接設定成PostgreSQL而非SQLite(節省之後deploy的麻煩~),可以參考這篇文章: Rails 使用 PostgreSQL
Ref: 第二十三天:認識資料庫