سؤال

أحاول استخدام antainment_fu لتحميل الملفات إلى دليل خارج RAILS_ROOT. أريد حفظ الملفات ~/APP_NAME/uploads/ بحيث يمكن الموافقة عليها/رفضها قبل أن تصبح متاحة للجمهور. لقد جربت التكوين التالي ل has_attachment:

has_attachment  :storage => :file_system,
                :path_prefix => "~/APP_NAME/uploads/",
                :max_size => 5.megabytes

لسوء الحظ ، هذا التكوين يخلق ببساطة ~/APP_NAME/uploads/ هيكل الدليل في RAILS_ROOT. أي طريقة لحفظ الملف خارج RAILS_ROOT?

هل كانت مفيدة؟

المحلول 2

لقد وجدت طريقة بديلة تناسبني أفضل من استخدام أسماء المسارات النسبية. أضفت طريقة تسمى full_filename إلى فصل المرفق الخاص بي:

class attachment < ActiveRecord::Base
    def full_filename
       return  "/Users/ron/attachments/#{id}.#{file_format}"
    end
end

نصائح أخرى

ربما لا تكون هذه مشكلة مرفق ، بل كيف تعالج Ruby ملف I/O وكذلك كيفية تخزين الملفات في UNIX.

على سبيل المثال ، إذا كان تطبيقك يعيش ، على سبيل المثال ، ~/user/ron/app_name

إذا قمت بتغيير الكود أعلاه:

:path_prefix => "~/APP_NAME/uploads/"

ل:

:path_prefix => "../#{RAILS_ROOT}/uploads"

سيتم تخزين الملفات في مجلد يسمى "التحميلات" في ~/user/ron/uploads. "../" يعني دليل واحد فوق جذر القضبان الحالي. إذا كنت ترغب في الصعود إلى دليلين ، فسيكون ذلك "../../" وهكذا.

ولكن هذا يعالج فقط الملاحة الهرمية. إذا كنت ترغب في إخبار المرفق FU بتخزين الملفات في دليل متشددين في نظام الملفات الخاص بك ، فيمكنك منحه مسارًا ملفًا مثل "~/user/ron/app_name/uploads الطريق هش ويمكن أن تكون نقطة ألم في المستقبل في حالة تغير متطلبات تخزين الملفات الخاصة بك.

امل ان يساعد.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top