我正在尝试使用 PG 在 Heroku 上设置 Rails 应用程序,并使用设计和 oauth 与 Yahoo Sports api 进行交互。
我遇到了一个问题,当用户去验证 Heroku 日志时告诉我:
ActiveRecord::StatementInvalid (PG::Error: ERROR: value too long for type character varying(255)
因此,在阅读了这篇 Stack Overflow 帖子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))
我不确定如何解决这个问题或我应该研究什么。