2012-01-05 51 views
0

場景:
我在本地開發中使用Sinatra + Sinatra/Active Record + SQLite3。我知道,當我推到Heroku時,它使用Postgresql。這是好的,因爲我使用活動記錄,我應該沒有問題。Sinatra/ActiveRecord + Heroku生成錯誤

APP.RB文件

require 'rubygems' 
require 'sinatra' 
require 'sinatra/activerecord' 
require 'open-uri' 
require 'uri' 
require 'nokogiri' 

configure :development do 
    set :database, 'sqlite://development.db' 
end 

configure :test do 
    set :database, 'sqlite://test.db' 
end 

configure :production do 
    db = URI.parse(ENV['DATABASE_URL'] || 'postgres://localhost/mydb') 

    ActiveRecord::Base.establish_connection(
    :adapter => db.scheme == 'postgres' ? 'postgresql' : db.scheme, 
    :host  => db.host, 
    :username => db.user, 
    :password => db.password, 
    :database => db.path[1..-1], 
    :encoding => 'utf8' 
) 
end 

class Picture < ActiveRecord::Base 

end 

get '/' do 
    @test = Picture.find(:all) 
    erb :index 
end 

錯誤
當我嘗試heroku rake db:migrate我得到以下錯誤...

DEBUG -- : NoMethodError: undefined method `values' for #<PGresult:0x00000002b24d08>: SHOW client_min_messages 

DEBUG -- : PGError: ERROR: invalid value for parameter "client_min_messages": "" 

後來我想確定沒有後顧之憂我會試試這個heroku功能,將我的本地sqlite3 development.db中的數據推送到我的heroku製作數據庫中。所以,我沒有heroku push:db sqlite://development.db成功的數據是。

我然後重新啓動應用程序,並進一步推提交,但我不能訪問任何與ActiveRecord的。如果我對Picture.find(:all)進行基本查詢,則會得到相同的DEBUG錯誤。我的configure :production搞砸我了嗎? 有什麼建議嗎?

+2

「我正在使用活動記錄,我應該沒有問題。」你顯然沒有閱讀關於SO的heroku問題。對PostgreSQL進行安裝和開發會更好。 – 2012-01-05 02:37:52

+0

是啊,開始聽起來像我將不得不這樣做。希望不要學習另一種SQL語言。 – alenm 2012-01-05 03:24:23

+0

SQL是SQL。但SQLite不是SQL。 (並且MySQL也不是。)還沒有。 – 2012-01-05 04:26:59

回答

1

你以某種方式設置配置參數client_min_messages爲空字符串。

手冊告知here

有效值DEBUG5,DEBUG4,DEBUG3,DEBUG2,DEBUG1,LOG,通知, WARNING,ERROR,FATAL,和恐慌

可以設置此參數postgresql.conf在會話中的任何時間:

SET client_min_messages = WARNING; 

要將其重置爲默認定義於postgresql.conf

RESET client_min_messages; 
+0

是的,我不知道我是怎麼做到的?我只是想知道我的應用程序是否甚至可以根據我的設置與Heroku上的製作數據庫進行交流。 – alenm 2012-01-05 03:22:55