2012-12-13 48 views
0

我正在嘗試在heroku上使用PG安裝rails應用程序,並且還使用devise和oauth與雅虎體育api進行交互。設計; Heroku的; Postgres的; Rails

我遇到了在那裏當用戶進入到Heroku的日誌驗證的問題告訴我:

ActiveRecord::StatementInvalid (PG::Error: ERROR: value too long for type character varying(255) 

所以閱讀棧溢出後PostgreSQL string(255) limit - Rails, Ruby and Heroku 後,我試圖改變令牌,因爲從字符串文本這似乎是可能導致超過255限制的最長的事情。我的遷移看起來像這樣:

class AddAccessTokenToAuthentications < ActiveRecord::Migration 
    def change 
    add_column :authentications, :token, :text, :limit => nil 
    add_column :authentications, :secret, :string 
    end 
end 

但是由於某些原因,它似乎正在將所有內容都改爲文本。當我看到我的模式移植後顯示:

create_table "authentications", :force => true do |t| 
    t.integer "user_id" 
    t.text  "provider", :limit => 255 
    t.text  "uid",  :limit => 255 
    t.datetime "created_at",    :null => false 
    t.datetime "updated_at",    :null => false 
    t.text  "token",  :limit => 255 
    t.text  "secret",  :limit => 255 
end 

當我推到Heroku的,並嘗試在Heroku我收到此錯誤遷移:

-- create_table("authentications", {:force=>true}) 
    NOTICE: CREATE TABLE will create implicit sequence "authentications_id_seq" for serial column "authentications.id" 
    rake aborted! 
    PG::Error: ERROR: type modifier is not allowed for type "text" 
    LINE 1: ...serial primary key, "user_id" integer, "provider" text(255),... 
    : CREATE TABLE "authentications" ("id" serial primary key, "user_id" integer, "provider" text(255), "uid" text(255), "created_at" timestamp NOT NULL, "updated_at" timestamp NOT NULL, "token" text(255), "secret" text(255)) 

我不知道如何解決這個或者我應該考慮什麼。如果有人有任何建議,將不勝感激!

謝謝!

回答

1
PG::Error: ERROR: type modifier is not allowed for type "text" 

意味着你不能使用:limit

你可以做什麼可以是:

t.text "provider" # = varchar(max) 

t.string "provider", :limit => 2147483647 # for max limit based on your db 
+0

我會在遷移中做什麼? – BC00

+1

將其更改爲postgres max thx。愚蠢的我 – BC00

0

您的text字段無法對它們進行限制。也許你打算用string代替?

+0

我可以改變字符串的限制? – BC00

+0

我的理解是,pg字符串的限制是255,因爲我試圖保存的東西比它所導致的錯誤更長,因此我需要將類型更改爲文本,但現在看起來它並不適用於某些原因 – BC00

+0

如果你打算使用文本,那麼在它們之後擺脫':limit'選項。 –