其實是靠芝麻好友幫忙看英文和找方法才順利成功
雖然用GitHub可以看程式碼,但沒有伺服器平台讓你看成果,於是出現Heroku
Heroku官網:https://dashboard.heroku.com/
誤食Heroku需要注意風險
1.虛擬平台用SQLite在Heroku不支援,需要想辦法轉成PostgreSQL語法
2.虛擬平台有提供Rails伺服器,但如果弄Heroku設定會GG,例如Cloud9的rails server -p $PORT -b $IP,因此要開新虛擬平台給Heroku
既然知道誤食後果那麼開始上傳......
首先第一步要註冊當會員
再來第二步需要安裝bundle,在終端機下gem install bundler
第三步繼續在終端機下heroku login,打上會員帳密
第四步準備好一個GitHub專案
git init
echo "public/uploads" >> .gitignore
echo "tmp" >> .gitignore
echo "logs" >> .gitignore
git add --all
git commit -m "XXXX"
第五步要調整資料庫與相關東西
因為Heroku只支援PostgreSQL,且需安裝其他東西,在Gemfile檔需要改一些
Gemfile
ruby '2.1.5' <<在前面打上ruby 版本,不然在push時會錯誤
gem 'puma' <<安裝Heroku伺服器,不然在push時會錯誤
group :development do <<SqLite變成僅在開發
gem 'sqlite3'
end
group :production do
gem 'pg' <<實際運作在PostgreSQL
gem 'rails_12factor'
end
接著在終端機下
bundle install --without production
bundle update
第六步在專案之下方創個Procfile檔,檔案內容如下
web: bundle exec puma -t 5:5 -p ${PORT:-3000} -e ${RACK_ENV:-development}
第七步routes.rb需要有寫"root XXXX"
明明在Rails Server可以不寫,但很抱歉在push時會直接噴錯誤
routes.rb
root :to => 'costs#index'
最後一步來運作存倉上傳
git add --all
git commit -m "XXXX"
heroku create XXX <<創個App
git push heroku master <<push
如果在push過程中出現
remote: ###### WARNING: 代表有錯誤,會顯示訊息
像我一直卡在bootstrap不過,後來猜可能用虛擬平台中途安裝失敗導致抓不到檔,於是砍掉不用bootstrap
master -> master 代表上傳成功
heroku run rake db:migrate <<把資料庫與heroku連在一起
heroku ps:scale web=1 <<指定頁面
heroku open <<開啟頁面
接著會給像'https://moneydetails.herokuapp.com/' ,把網址貼到網頁上就可以看成果
網頁上如果顯示你有錯誤,可以在終端機下heroku logs來看錯誤訊息
例如像我想取出月的SQL錯誤
# Cost.where(['cost_date like ?','2015-'+@puts[i]+'%'])
# like 就只能用字串
# sqlite 因為內部其實都是用 text 實作才可以讓你Like那樣用 但那不是好的用法
接著芝麻找到有date_part和between and可以用在PostgreSQL
# Cost.where(["date_part('year',cost_date) = ? and date_part('month',cost_date) = ?", 2015,@puts[i]]) <<成功
# Cost.where(['cost_date between ? and ?','2015-'+@puts[i]+'-01','2015-'+@puts[i]+'-31']) <<失敗
為何第二種會失敗,在heroku logs有說明原因
ERROR: date/time field value out of range: "2015-02-31"
LINE 1: ..."costs" WHERE (cost_date between '2015-02-01' and '2015-02-3...
哇,我真沒想到他會抓到2月沒有31號
既然date_part這麼好用,於是試試SQLite行不行,結果發生沒有這個方法的錯誤....(==你搞怪阿)
最後我用PostgreSQL失敗第二種方法,在SQLite成功了
Rails Girls參考網址:http://guides.railsgirls.com/heroku/
好友芝麻教學參考網址:http://sunnylee0320.blogspot.tw/2015/04/railsheroku.html