2009-12-07 16 views
9

Uygulamamdaki ekler için ataç kullanıyorum. Bir sürü eski veri için bir içe aktarma komut dosyası yazıyorum, ancak diskteki dosyalardan nasıl kağıt kırpması nesneleri oluşturulduğunu bilmiyorum. İlk tahminim sahte CGI çok parçalı nesneler yaratmaktır, ancak bu biraz kaba bir çözüm gibi görünüyor ve ilk denemem başarısız oldu, çünkü bence doğru to_tempfile yöntemini alamadım.Eski verileri Rails ve Paperclip ile içe aktarma

Bunu yapmak için doğru bir yol var mı? Oldukça kolay olması gereken bir şey gibi görünüyor.

cevap

16

Aynı şeyi yaptığımı biliyorum ve bir File nesnesini her dosyaya giden yoldan oluşturduğuma ve görüntü niteliğine atadığımı düşünüyorum. Paperclip o dosya üzerinde çalışabilir:

thing.image = File.new("/path/to/file.png") 
thing.save 
+1

Not deneyin Bir dahaki sefere işe yarayabilecek en basit şey. – Zak

+0

Senin kadar şaşırmış olduğumu hatırlıyorum. – Ben

+0

Evet - bu kesinlikle –

14

Bu yerel dosyalar için çok çalışır ama uzak dosyaları için de çalışmaz. Görüntüleri yüklemek için ataç kullanan bir uygulama var. Bu görüntüler amazon s3'te depolanıyor.

thing.image = open('http://www.someurl.com/path/to/image.jpg') 
thing.save 

dosya küçükse (örneğin, daha az 10K) daha sonra openURI bir StringIO nesne döndürür ve benim dosya saklanan olur: Neyse, ben aktarmak için gerekli bazı eski verileri vardı bu yüzden aşağıdaki çalıştı s3 stringio.txt olarak

Dosya 10K'dan büyükse, openuri bir TempFile nesnesini döndürür. benzersiz olmak, ama gerçekten ben aşağıdakileri yaparak sorunu çözmek başardı

image.jpg orijinal dosya ile ilgili değil ama s3 dosya adı biter: Kendine

remote_photo = open('http://www.someurl.com/path/to/image.jpg') 
def remote_photo.original_filename;base_uri.path.split('/').last; end 
thing.image = remote_photo 
thing.save 
+0

+1 Wow .. sen benim günümü yaptın .. – bragboy

+0

Thx. 'original_filename' için :) –

İlgili konular