Rails种子数据与关联Heroku错误

时间:2017-09-26 01:09:19

标签: ruby-on-rails heroku

我尝试使用heroku将一些种子数据加载到应用程序中。我更希望将一堆种子(样本)数据插入到我的应用程序中,这样我的客户端就可以看到它包含很多对象。 (想象一个演示电子商务应用程序 - 我希望能够显示几十个样本产品而无需手动输入)

我的种子数据在开发中运行良好,但在生产中,一个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

有没有人在哪里出错?

2 个答案:

答案 0 :(得分:1)

您发布的链接指出无法在Heroku中删除参照完整性。它建议考虑使用另一个测试数据脚手架工具(如FactoryGirl或Fabrication Gem)

无论如何,如果环境不是开发,你的代码什么都不做。所有代码都在 if 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

答案 1 :(得分:0)

最终我接受了this回答,这已经在我的代码中,以确保协会在开发中工作 对于开发,这是必需的:   ActiveRecord::Base.connection.disable_referential_integrity do

生产: heroku中不允许disable_referential_integrity,问题是关联模型(Pic_Attachment)在它所属的模型对象之前创建,因此会抛出错误,因为它需要一个对象属于。对我有用的是从种子文件中删除disable_referential_integrity并注释掉相关模型中的belongs_to行(PicAttachment),然后提交/推送您的更改并且它可以正常工作。 (之后再添加这些行,以便开发工作)

我希望这有助于某人。在这里工作了几天。