2011-11-21 91 views
0

我剛剛將我的應用程序部署到heroku,並在出現一些問題後,它似乎工作。 但是,然後我嘗試從應用程序添加一個記錄到sqlite3數據庫,它不工作,並沒有重定向到'/'。Heroku添加記錄到sqlite

這是一個sinatra應用程序,我已經安裝了所有的數據映射器依賴項,並且日誌不會重新發布錯誤。 這裏是代碼

require 'rubygems' 
require 'sinatra' 
require 'dm-core' 
require 'dm-timestamps' 
require 'dm-validations' 
require 'dm-migrations' 
DataMapper::setup(:default, "sqlite3://#{Dir.pwd}/rubrica.db") 

class Contatto 
    include DataMapper::Resource 
    property :id, Serial 
    property :fname, Text 
    property :lname, Text 
    property :phone, Text 
    property :mail, Text 
end 

DataMapper.finalize.auto_upgrade! 

get '/' do 
    @title = 'Tutti' 
    @Contatti = Contatto.all 
    erb :home 
end 

get '/add' do 
    @title = 'Aggiungi' 
    erb :aggiungi 
end 

post '/' do 
    c = Contatto.new 
    c.fname = params[:fname] 
c.lname = params[:lname] 
c.phone = params[:phone] 
c.mail = params[:mail] 
c.save 
redirect '/' 

和鏈接 here

回答

1

的問題是,Heroku的不使用SQLite。如果您指定sqlite作爲您選擇的數據庫,則Heroku在接收推送時將執行一些黑魔法,並將sqlite3 gem替換爲postgres gem,然後使用postgres數據庫運行您的應用程序。所以這就解釋了爲什麼你的DataMapper::setup(:default, "sqlite3://#{Dir.pwd}/rubrica.db")呼叫不起作用。

Read this Heroku doc for more information.

在Heroku的文檔的一些進一步閱讀,看來你需要改變你對DataMapper的電話是這樣:

DataMapper.setup(:default, ENV['DATABASE_URL'] || 'sqlite3://#{Dir.pwd}/rubrica.db') 
+0

所以,我應該切換到Postgres的?以及爲什麼它可以獲得現有記錄? –

+0

查看我的更新回覆。 – Batkins

+0

謝謝!!!!有用! –