سؤال

أحتاج إلى تخزين بعض الخصائص البسيطة في ملف والوصول إليها من روبي.

أنا أحب تمامًا تنسيق الملف ‎.properties الذي يعد المعيار لمثل هذه الأشياء في Java (باستخدام فئة java.util.Properties)...إنه بسيط وسهل الاستخدام وسهل القراءة.

لذا، هل هناك فئة روبي في مكان ما تسمح لي بتحميل بعض أزواج القيمة الرئيسية من ملف مثل هذا دون بذل الكثير من الجهد؟

لا أريد استخدام XML، لذا يرجى عدم اقتراح REXML (هدفي لا يضمن "ضريبة قوس الزاوية").

لقد فكرت في طرح الحل الخاص بي ...من المحتمل أن يكون حوالي 5-10 أسطر من قمم التعليمات البرمجية، لكنني ما زلت أفضل استخدام مكتبة موجودة (إذا كانت في الأساس عبارة عن تجزئة مبنية من ملف) ...لأن ذلك من شأنه أن يخفضه إلى سطر واحد ....


تحديث:إنه في الواقع تطبيق Ruby مباشر، وليس Rails، لكنني أعتقد أن YAML سيعمل بشكل جيد (كان ذلك في الجزء الخلفي من ذهني، لكنني نسيت ذلك ...لقد رأيت ولكن لم تستخدم حتى الآن)، شكرا للجميع!

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

المحلول

هل هذا لتطبيق Rails أم لتطبيق Ruby؟

حقًا مع أي منهما قد تكون قادرًا على لصق خصائصك في ملف yaml وبعد ذلك YAML::Load(File.open("file")) هو - هي.


ملاحظة من مايك ستون: سيكون من الأفضل في الواقع القيام بما يلي:

File.open("file") { |yf| YAML::load(yf) }

أو

YAML.load_file("file")

كما تقترح مستندات روبي، وإلا فلن يتم إغلاق الملف حتى يتم جمع البيانات المهملة، ولكن اقتراح جيد بغض النظر :-)

نصائح أخرى

هناك خيار آخر وهو ببساطة استخدام ملف Ruby آخر كملف التكوين الخاص بك.

على سبيل المثال، قم بإنشاء ملف يسمى "خيارات"

{
    :blah   => 'blee',
    :foo    => 'bar',
    :items  => ['item1', 'item2'],
    :stuff  => true
}

وبعد ذلك في كود روبي الخاص بك، افعل شيئًا مثل:

ops = eval(File.open('options') {|f| f.read })
puts ops[:foo]

سوف تقوم YAML بذلك بشكل مثالي كما هو موضح أعلاه.على سبيل المثال، في أحد نصوص Ruby الخاصة بي، لدي ملف YAML مثل:

migration:
  customer: Example Customer
  test:     false
sources:
- name:     Use the Source
  engine:   Foo
- name:     Sourcey
  engine:   Bar

والذي أستخدمه بعد ذلك داخل روبي على النحو التالي:

config = YAML.load_file(File.join(File.dirname(__FILE__), ARGV[0]))
puts config['migration']['customer']

config['sources'].each do |source|
  puts source['name']
end

com.inifile - http://rubydoc.info/gems/inifile/2.0.2/frames سوف يدعم ملفات .properties الأساسية وكذلك ملفات .ini مع [الأقسام] على سبيل المثال.

[SECTION]
key=value

يعد YAML مفيدًا عندما تكون بياناتك ذات بنية معقدة ولكن يمكن أن تكون مربكة بالمسافات وعلامات التبويب ونهاية الأسطر وما إلى ذلك - مما قد يسبب مشاكل إذا لم تتم صيانة الملفات بواسطة المبرمجين.على نقيض ذلك .properties و .ini تعد الملفات أكثر تسامحًا وقد تكون مناسبة إذا لم تكن بحاجة إلى البنية العميقة المتاحة من خلال YAML.

كتب Devender Gollapally أ فصل للقيام بذلك على وجه التحديد:

...على الرغم من أنني أوصي باستخدام ملف YAML بشكل أفضل.

بدلاً من نمط .properties لملف التكوين، قد تفكر في استخدام YAML.يتم استخدام YAML في Ruby on Rails لتكوين قاعدة البيانات، وقد اكتسب شعبية في اللغات الأخرى (Python، وJava، وPerl، وغيرها).

نظرة عامة على وحدة Ruby YAML هنا: http://www.ruby-doc.org/core/classes/YAML.html

والصفحة الرئيسية لـ YAML موجودة هنا: http://yaml.org

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