2017-09-26 16 views
1

私はherokuでアプリに種データをロードしようとしています。私はクライアントが多くのオブジェクトでそれを見ることができるように、ちょうど私のアプリにシード(サンプル)データの束を挿入するために探しています。 (デモ用電子商取引アプリを想像してください - 手動で入力せずに数十個のサンプル商品を表示できるようにしたい)RailsシードデータとアソシエイトHerokuエラー

私の種子データは開発では問題なく動作しますが、1つのHMBT関連で以下のエラーが発生します:

WARNING: Rails was not able to disable referential integrity. 

This is most likely caused due to missing permissions. 
Rails needs superuser privileges to disable referential integrity. 

Herokuのドキュメントは、このthisは、私は(下記参照)私の種子のファイルに生産上の参照整合性を取り除くために、条件を試してみましたが、今で種子が実行されませんと述べました。それはちょうど、この行います

Running rake db:seed on ⬢ app... up, run.1225 (Free) 
    ActiveRecord::SchemaMigration Load (1.7ms) SELECT "schema_migrations".* FROM "schema_migrations" 

ここに私の種子は、以下のファイルの:誰がどこで間違ったつもりだん

if Rails.env.development? 
    ActiveRecord::Base.connection.disable_referential_integrity do 
end 

1.upto(14) do |n| 
    pic_one = File.open(File.join(Rails.root,'app/assets/images/file1.jpg')) 
    pic_two = File.open(File.join(Rails.root,'app/assets/images/carpet_2/file2.jpg')) 

    image = PicAttachment.create!([ 
     {picture: pic_one, w_dream_id: "#{n}"}, 
     {picture: pic_two, w_dream_id: "#{n}"}, 
    ]) 

    rug = Product.create!(
     pic_attachments: image 
    end  
    if Rails.env.development? 
    end 
    end 

+0

これをチェックしましたか? https://stackoverflow.com/questions/30729723/ruby-on-rails-deleting-fixtures-with-foreign-keys –

+0

@KickButtowskiありがとうございました。私の問題は解決しませんでした。スーパーユーザーに変更しようとしたときにエラーメッセージ「ALTER:コマンドが見つかりませんでした。」 – dgreen22

+0

u r歓迎ですが、このエラーはリレーショナルデータベースの隠れたエラーについて教えてくれますか? schema.rb plzを共有できますか? –

答えて

1

投稿したリンクは、Herokuで参照整合性を削除できないと述べています。これは、別のテストデータスキャフォールディングツール(FactoryGirlやFabrication Gemなど)を使用することを提案します。

とにかく、環境が開発されていない場合は、コードは何も行いません。 Rails.env.developmentの場合、すべてのコードはの内部にありますか?。最初のエンドは、に対応します。押し込みは間違っています。あなたのコードが実際にある:

if Rails.env.development? 
    ActiveRecord::Base.connection.disable_referential_integrity do 
    end 

    1.upto(14) do |n| 
    pic_one = File.open(File.join(Rails.root,'app/assets/images/file1.jpg')) 
    pic_two = File.open(File.join(Rails.root,'app/assets/images/carpet_2/file2.jpg')) 

    image = PicAttachment.create!([ 
     {picture: pic_one, w_dream_id: "#{n}"}, 
     {picture: pic_two, w_dream_id: "#{n}"}, 
    ]) 

    rug = Product.create!(
     pic_attachments: image 

    if Rails.env.development? 
    end 
end 
+0

ありがとう@パブロ。識別がオフであることを認識します。しかし、私の問題を解決するために表示されません。何か私は行方不明ですか? – dgreen22

0

最終的に私は、協会が開発中で働くことを確認するために私のコードでは、すでにだったthis答えを、取りました。 ActiveRecord::Base.connection.disable_referential_integrity do

生産のために:開発のために
が、これは必要とされている はdisable_referential_integrityはHerokuのでは許可されていないとの問題は、それが属するモデルオブジェクトの前に作成された関連するモデル(Pic_Attachment)、したがって、エラーになります所属するオブジェクトが必要なので投げられます。私にとっては、シードファイルからdisable_referential_integrityを削除し、関連付けられたモデル(PicAttachment)のbelongs_to行をコメントアウトしてから、変更をコミット/プッシュして動作させることでした。 (後でこれらの行を追加して開発作業を進めてください)

私はこれが誰かを助けてくれることを願っています。ここ数日間私の仕事をしてくれました。

+0

最初に製品を作成してから、最初から正しいproduct_idでイメージを作成するのはなぜですか? – Pablo

+0

@Pablo素晴らしい質問 - 私はPic_Attachmentの存在を検証していたので、それも失敗するでしょう。あなたの意見は、私が考えているにもかかわらず、代わりの方法かもしれません、単にバリデーションの存在をコメントアウトしてください。 Productオブジェクトが既に作成されていて、 'Product.update! 'のようなものを実行しないでpic_attachments属性を更新するかどうかわからない場合は、私は確信していませんでした。 – dgreen22