0

PG を使用して Heroku で Rails アプリをセットアップしようとしています。また、devise と oauth を使用して Yahoo Sports API とやり取りしています。

ユーザーが Heroku ログを認証しようとすると、次のような問題が発生します。

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

したがって、このスタック オーバーフロー ポストPostgreSQL string(255) limit - Rails, Ruby and Herokuを読んだ後、トークンを文字列からテキストに変更してみました。私の移行は次のようになりました。

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))

これを解決する方法や、何を調べるべきかわかりません。

4

2 に答える 2

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
于 2012-12-13T21:00:52.577 に答える
0

あなたのtextフィールドはそれらに制限を設けることができません。おそらくあなたはstring代わりに使うつもりでしたか?

于 2012-12-13T20:53:15.910 に答える