Я пытаюсь сделать что-то очень простое, используя Heroku, Paperclip и S3 - установить привязанность одной модели к другой.
Вот пользовательское задание на грабли, которое я собрал:
task :migrate => :environment do
@companies = Company.where("attachment_file_name IS NOT NULL")
@companies.each do |c|
if c.attachments.where("attachment_file_name = ?", c.attachment_file_name).blank?
# i.e. if there are no instances of Attachment that match c.attachment
a = Attachment.new( :company_id => c.id, :name => "Default" )
a.attachment = c.attachment
a.save
end
end
end
Итак, я пытаюсь переместить Company.attachment в новый экземпляр новой модели Attachment. На моем локальном сервере разработки все работает прекрасно.
После нажатия на Heroku я получаю следующую ошибку, указывающую на строку a.attachment = c.attachment
.
The specified key does not exist.
Я пытаюсь выполнить операцию вручную для компании, которая имеет вложение в консоли heroku, и получаю:
TypeError: can't convert nil into String
/app/.bundle/gems/ruby/1.8/gems/paperclip-2.3.6/lib/paperclip/storage/s3.rb:131:in `extname'
/app/.bundle/gems/ruby/1.8/gems/paperclip-2.3.6/lib/paperclip/storage/s3.rb:131:in `to_file'
/app/.bundle/gems/ruby/1.8/gems/paperclip-2.3.6/lib/paperclip/attachment.rb:81:in `assign'
/app/vendor/plugins/paperclip/lib/paperclip.rb:245:in `attachment='
Вы знаете, что здесь происходит?
Я только что попробовал c.attachment = c.attachment
. Та же ошибка !!!