كيف يمكنني تنفيذ ملفات قالب Ruby (ERB) بدون خادم ويب من سطر الأوامر؟

StackOverflow https://stackoverflow.com/questions/980547

سؤال

احتاج عرب (نظام قالب روبي) لإصدار ملفات غير HTML.
(بدلا من ذلك، أريد استخدامه لملفات المصدر مثل .java، .cs، ...)

كيف أفعل "ينفذ" قوالب روبي من سطر الأوامر؟

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

المحلول

يجب أن يكون لديك كل ما تحتاجه في دليل Ruby / Bin الخاص بك. في نظام My (WinXP، Ruby 1.8.8.6)، لدي ruby/bin/erb.bat

erb.bat [switches] [inputfile]
  -x               print ruby script
  -n               print ruby script with line number
  -v               enable verbose mode
  -d               set $DEBUG to true
  -r [library]     load a library
  -K [kcode]       specify KANJI code-set
  -S [safe_level]  set $SAFE (0..4)
  -T [trim_mode]   specify trim_mode (0..2, -)
  -P               ignore lines which start with "%"

لذا erb your_erb_file.erb يجب أن تكتب النتيجة إلى Stdout.

(عدل

انظر PRAG Prog Book. مناقشة (تبدأ في منتصف الطريق أسفل الصفحة).

لاحظ أيضا أن جاك هيرينغتون كتب كتاب كامل حول رمز التوليد الذي يستخدم Ruby / Erb.

نصائح أخرى

اكتب سيناريو روبي يفعل ذلك. وثائق API هنا:http://www.ruby-doc.org/stdlib/libdoc/erb/rdoc/

علي سبيل المثال:

template = ERB.new File.read("path/to/template.erb"), nil, "%"
template.result(binding)

(حيث التوصيل هو ملزم معvars التي يحتاجها القالب.)

سيكون هناك خيار آخر هو استخدام Ruby -e، لأن Erb Itslef بسيط للغاية.

شيء مثل:

ruby -rerb -e "puts ERB.new(File.read(<file name here>)).result"

ومع ذلك، أفترض أن لديك سياق تريد تقديم القالب فيه. كيف تتوقع الحصول على هذا السياق؟ على سبيل المثال، تحقق من:

ruby -rerb -e "hello = 'hello'; puts ERB.new('<%= hello %> world').result(binding)"

والتي ستطبع "Hello World"، باستخدام المستوى الأعلى، حيث حددت hello متغير، كما التجليد.

إذا كنت تستطيع تبديل ERB إلى Erubis، فإن حل المشكلات الخاصة بك بسيطة مثل:

require 'erubis'
template = File.read("sample_file.erb")
template = Erubis::Eruby.new(template)
template.result(:your_variable => "sample")

وجدت هذا السؤال أثناء محاولة اختبار قوالب الدمية الخاصة بي.

انتهى بهذا الحل:

  1. على طول الخاص بك foo.erb إنشاء ملف foo.vars.erb
  2. ضع جميع متغيرات القالب في هذا الملف الجديد، على سبيل المثال:

    <% @my_param="foo bar" %>
    <% @another_param=123 %>
    

    أو ما يعادلها):

    <%
    @my_param="foo bar"
    @another_param=123
    %>
    
  3. عند تشغيل سطر الأوامر هذا:

    cat foo.vars.erb foo.erb | erb
    

يجب الآن طباعة القالب الذي تم تقديمه بالكامل إلى STD-OUT. من هناك، يمكنك التحقق من الإخراج باليد، أو يمكنك أن تأخذ Diff (أو أدوات أخرى) لمقارنتها بمخرج مسبق.

هذه مقالة أساسية جيدة - http://rrn.dk/rubys-erb-stem-System.و واحدة اخرى - http://www.stuartellis.eu/articles/erb/

حاولت التعليق على هذا، ولكن رابط التعليقات غير متوفرة.

أنا أستخدم هذا:

template = ERB.new File.new("path/to/template.erb").read, nil, "%"
template.result(binding)

من النشر أعلاه: ووجدت ما أعتقد أنه قد يكون مشكلة:

أقوم بإنشاء ملفات دفعة DOS مثل:

%JAVA_HOME%\bin\jar -xvf <%=inputfile%>...

ووجدت مشكلة شيء غريب - أحصل على هذا عندما أركض مع الرمز أعلاه:

Processing Template test.txt
erb):2:in `render': compile error (SyntaxError)
erb):2: syntax error, unexpected tSTRING_BEG, expecting $end
erbout.concat "\n"
               ^
       from DBUser.rb:49:in `render'
       from DBUser.rb:43:in `each'
       from DBUser.rb:43:in `render'
       from DBUser.rb:81

جربت ما يلي، وحصلت على مشكلتي الخاصة - لست متأكدا مما إذا كانت هذه هي الإجابة الصحيحة للجميع ...

template = ERB.new File.new("path/to/template.erb").read
template.result(binding)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top