استيراد البيانات القديمة مع القضبان والأوراق
-
16-09-2019 - |
سؤال
أنا أستخدم PaperClip للمرفقات في طلبي. أكتب البرنامج النصي للاستيراد للحصول على مجموعة من البيانات القديمة، لكنني لا أعرف كيفية إنشاء كائنات PaperClip من الملفات الموجودة على القرص. تخمين الأول هو إنشاء كائنات MOCK CGI متعددة الأجزاء، ولكن يبدو أنه يبدو قليلا من الحل الخام، وفشلت محاولتي الأولية، وأعتقد أنني لم أحصل على طريقة To_tempfile بشكل صحيح.
هل هناك طريقة صحيحة للقيام بذلك؟ يبدو وكأنه شيء يجب أن يكون سهلا إلى حد ما.
المحلول
أعلم أنني فعلت نفس الشيء، وأعتقد أنني قمت فقط بإنشاء كائن ملف من المسار إلى كل ملف، ويعينه لسمة الصورة. سيتم تشغيل PaperClip على هذا الملف:
thing.image = File.new("/path/to/file.png")
thing.save
نصائح أخرى
هذا يعمل بشكل رائع للملفات المحلية ولكنه لا يعمل أيضا للملفات البعيدة. لدي تطبيق يستخدم PaperClip لتحميل الصور. يتم تخزين هذه الصور على Amazon S3. على أي حال، كان لدي بعض البيانات القديمة التي كنت بحاجة للاستيراد حتى جربت ما يلي:
thing.image = open('http://www.someurl.com/path/to/image.jpg')
thing.save
إذا كان الملف صغيرا (قل، أقل من 10K) ثم إرجاع OpenURI كائن Stringio وسيتم تخزين ملفي على S3 As Stringio.txt
إذا كان الملف أكبر من 10K، فستظهر OpenURI كائن Tempfile. لكن اسم الملف على S3 ينتهي كونه فريدا، ولكن ليس حقا فيما يتعلق بأبطال اسم Image.jpg الأصلي
كنت قادرا على حل المشكلة عن طريق القيام بما يلي:
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