我尝试使用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
有没有人在哪里出错?
答案 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
),然后提交/推送您的更改并且它可以正常工作。 (之后再添加这些行,以便开发工作)
我希望这有助于某人。在这里工作了几天。