其實是靠芝麻好友幫忙看英文和找方法才順利成功

雖然用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

創作者介紹
創作者 o迷苓o 的頭像
o迷苓o

~米漿牛奶~

o迷苓o 發表在 痞客邦 留言(0) 人氣()