سؤال

انا ذاهب الى أن يكون بدء المشروع في وقت قريب يتطلب دعم كبير العش الملفات الثنائية.أود أن استخدام روبي على القضبان webapp, ولكن أنا قلق مع النقطة الدعم.في تجربتي مع لغات أخرى ، أطر و قواعد بيانات النقط غالبا ما يتم التغاضي عنها وبالتالي يكون الفقراء صعبة ، و/أو عربات التي تجرها الدواب الأداء الوظيفي.

لا RoR spport النقط بشكل كاف ؟ هل هناك أي gotchas أن يرتفع مرة كنت بالفعل ملتزمة القضبان ؟

راجع للشغل:أريد أن استخدام الإنترنت و/أو الخلية كما الخلفية قاعدة البيانات الخاصة بنا.ومن الواضح أن النقطة الدعم في قاعدة البيانات الأساسية هو المهم.لحظة, أريد أن تجنب التركيز على ديسيبل النقطة القدرات ؛ أنا أكثر اهتماما في كيفية القضبان نفسها يتفاعل.من الناحية المثالية, القضبان ينبغي إخفاء تفاصيل بيانات من لي ، لذا يجب أن تكون قادرة على التحول من واحدة إلى أخرى.إذا كان هذا هو لا حالة (أي:هناك بعض المشاكل مع استخدام القضبان معين DB) ثم الرجاء ذكر ذلك.

تحديث:أيضا, أنا لا أتحدث فقط عن ActiveRecord هنا.سوف تحتاج إلى التعامل مع الملفات الثنائية على HTTP الجانب (تحميل الملف فعال).وهذا يعني الحصول على الوصول إلى مناسبة رؤوس HTTP والجداول عبر القضبان.لقد تم تحديث السؤال من العنوان و الوصف لتعكس هذا.

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

المحلول

+1 attachment_fu

يمكنني استخدام attachment_fu في واحدة من بلدي تطبيقات و يجب تخزين الملفات في ديسيبل (مزعج الأسباب التي هي خارج نطاق هذا كونفو).

فإن ( ؟ ) شيء صعب التعامل w/BLOB ما وجدته هو أن كنت في حاجة الى فصل مسار رمز لإرسال البيانات إلى المستخدم-لا يمكنك ببساطة في خط مسار على الملفات مثل لو كان سهل جين الملف.

على سبيل المثالإذا كنت تخزين الصورة الرمزية المعلومات لا يمكنك أن تفعل ببساطة:

<%= image_tag @youruser.avatar.path %>

لديك لكتابة بعض المجمع المنطق و استخدام send_data مثلا(أدناه هو مجرد مثال w/attachment_fu ، في الممارسة العملية تحتاج إلى جفاف هذا الأمر)

send_data(@youruser.avatar.current_data, :type => @youruser.avatar.content_type, :filename => @youruser.avatar.filename, :disposition => 'inline' )

للأسف, بقدر ما أعرف attachment_fu (أنا لم يكن لديك أحدث إصدار) لا التفاف ذكي بالنسبة لك-عليك كتابة ذلك بنفسك.

P. S.رؤية سؤالك تحرير - Attachment_fu يعالج كل هذه الاشياء مزعج أن أذكر لكم-عن الحاجة إلى معرفة مسارات الملفات و كل هذا الهراء -- ما عدا القليل المشكلة عند تخزين في ديسيبل.إعطائها ؛ هو معيار القضبان التطبيقات.إذا كنت تصر على إعادة اختراع العجلة ، مصدر رمز attachment_fu أن الوثيقة معظم gotchas أيضا!

نصائح أخرى

أما بالنسبة الجري, يمكنك أن تفعل كل شيء في (على الأقل في الذاكرة) طريقة فعالة.على تحميل الجانب ملف المعلمات في أشكال المستخرجة كما IO الكائنات التي يمكنك أن تقرأ من ؛ على تحميل الجانب تبدو في شكل render :text => أن يأخذ Proc الحجة:

render :content_type => 'application/octet-stream', :text => Proc.new {
    |response, output|
    # do something that reads data and writes it to output
}

إذا الاشياء الخاصة بك في ملفات على القرص ، على الرغم من المذكور حلول بالتأكيد سوف تعمل على نحو أفضل.

يمكنك استخدام :binary اكتب في ActiveRecord الهجرة أيضا تقييد الحد الأقصى لحجم:

class BlobTest < ActiveRecord::Migration
  def self.up
    create_table :files do |t|
      t.column :file_data, :binary, :limit => 1.megabyte
    end
  end
end

ActiveRecord يعرض النقطة (أو CLOB) محتويات روبي السلسلة.

أعتقد أن أفضل رهان هو attachment_fu المكونات في:http://github.com/technoweenie/attachment_fu/tree/master

تحديث:وجدت بعض مزيد من المعلومات هنا http://groups.google.com/group/rubyonrails-talk/browse_thread/thread/a81beffb93708bb3

ننظر إلى البرنامج المساعد ، x_send_file أيضا.

"إن XSendFile البرنامج المساعد يوفر واجهة بسيطة لإرسال الملفات عن طريق X-Sendfile رأس HTTP.وهذا يتيح خادم الويب الخاص بك لخدمة الملفات مباشرة من القرص بدلا من الجري ومن خلال القضبان العملية.هذا هو أسرع و يوفر الكثير من الذاكرة إذا كنت تستخدم الهجين.ليس كل ملقم ويب يدعم هذا الرأس.YMMV."

لست متأكدا إذا كان يمكن استخدامها مع النقط ، قد يكون عن الملفات على نظام الملفات.ولكن ربما تحتاج إلى شيء لا ربط ملقم ويب تدفق أجزاء كبيرة من البيانات.

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