Jak wykonać pliki szablonów ruby (ERB) bez serwera www z linii poleceń?

Potrzebuję ERB (System szablonów Ruby) do szablonów plików innych niż HTML.
(zamiast tego chcę go używać do plików źródłowych, takich jak .java,cs,..)

Jak mogę "wykonać" szablony Ruby z linii poleceń?

Author: ivan_ivanovich_ivanoff, 2009-06-11

7 answers

Powinieneś mieć wszystko, czego potrzebujesz w katalogu ruby / bin. Na moim (WinXP, Ruby 1.8.6) systemie mam 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 "%"

Więc erb your_erb_file.erb powinien zapisać wynik na STDOUT.

(EDIT: windows ma erb.bat i po prostu "erb". The .plik bat jest tylko opakowaniem dla erb, co chyba powinno sprawić, że ta sama komenda będzie działać prawie tak samo na każdym systemie operacyjnym)

Zobacz prag prog book dyskusja (zaczyna się mniej więcej w połowie strony).

Zauważ również, że Jack Herrington napisał całą książkę o generowaniu kodu używającego Ruby / ERB.
 25
Author: Mike Woodhouse,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-11 20:33:47

Napisz skrypt ruby, który to robi. Dokumentacja API znajduje się tutaj: http://www.ruby-doc.org/stdlib/libdoc/erb/rdoc/

Na przykład:

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

(Gdzie powiązanie jest powiązaniem z @ vars, którego potrzebuje szablon.)

 23
Author: Sam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-14 11:01:16

Inną opcją byłoby użycie ruby-e, ponieważ ERB itslef jest tak prosty.

Coś w stylu:

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

Zakładam jednak, że masz kontekst, w którym chcesz renderować szablon. Jak chcesz poznać ten kontekst? Jako przykład sprawdź:

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

, który wyświetli" hello world", używając najwyższego poziomu, gdzie zdefiniowałeś zmienną hello, jako powiązanie.

 14
Author: Yehuda Katz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-12 18:11:24

Jeśli możesz przełączyć ERB na Erubis, Twoje rozwiązanie problemu jest tak proste jak:

require 'erubis'
template = File.read("sample_file.erb")
template = Erubis::Eruby.new(template)
template.result(:your_variable => "sample")
 12
Author: morgoth,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-11 10:10:58

Znalazłem to pytanie podczas próby przetestowania moich szablonów lalek.

Zakończone tym rozwiązaniem:

  1. wzdłuż foo.erb Utwórz plik foo.vars.erb
  2. Umieść wszystkie zmienne szablonu w Nowym pliku, np.:

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

    Lub (odpowiednik):

    <%
    @my_param="foo bar"
    @another_param=123
    %>
    
  3. W linii poleceń uruchom to:

    cat foo.vars.erb foo.erb | erb
    

Twój w pełni renderowany szablon powinien być teraz wydrukowany na std-out. Stamtąd można sprawdzić wyjście ręcznie, lub można wziąć diff (lub inne narzędzia), aby porównać go z wstępnie renderowanym wyjściem.

 3
Author: Hubert Grzeskowiak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-02 08:19:10
 1
Author: Ninad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-26 04:14:59

Próbowałem skomentować to, ale link do komentarzy nie jest dostępny.

Używam tego:

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

Z powyższego postu: i znalazłem to, co myślę, że może być problemem:

Tworzę pliki wsadowe DOS:

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

I Znalazłem dziwny problem-dostaję to po uruchomieniu z powyższym kodem:

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

Próbowałem następujących i obejrzałem mój konkretny problem - nie jestem pewien, czy jest to właściwa odpowiedź dla wszystkich ...

template = ERB.new File.new("path/to/template.erb").read
template.result(binding)
 0
Author: monojohnny,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-11 13:29:10