2009-06-11 11 views

Trả lời

25

Bạn nên có mọi thứ bạn cần trong thư mục ruby ​​/ bin của mình. Trên hệ thống của tôi (WinXP, Ruby 1.8.6), tôi có 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 "%" 

nên erb your_erb_file.erb nên viết kết quả để STDOUT.

(EDIT:. Cửa sổ có erb.bat và chỉ đơn giản "ERB" Các tập tin .bat chỉ là một wrapper cho ERB, mà tôi đoán nên làm cho việc chỉ huy cùng khá nhiều giống nhau trên bất kỳ hệ điều hành)

Xem các cuộc thảo luận prag prog book (bắt đầu khoảng nửa đường xuống trang).

Cũng lưu ý rằng Jack Herrington đã viết a whole book về việc tạo mã sử dụng Ruby/ERB.

+1

Tuyệt vời! Tôi ** đã được ** cố gắng để chạy erb (mà không biết nếu nó là chính xác) nhưng không thành công, vì vậy tôi nghĩ rằng nó không thể được thực hiện trực tiếp, nhưng cần một số thư viện bên ngoài để thay thế. Sau khi trả lời của bạn tôi nhận ra, rằng tôi chỉ có một ruby ​​tùy chỉnh cài đặt, mà không phải là con đường của hệ thống;) Cảm ơn bạn! –

+0

Tôi cần nó cho một kịch bản kiến ​​(nó phải chạy trên tất cả các nền tảng). Tôi nhận thấy rằng ở đây dưới linux tôi có erb (không có phần mở rộng), nhưng bạn đã đề cập erb.bat (vì vậy tôi giả định dưới cửa sổ bạn không có erb mà không có phần mở rộng). Bạn có thể gợi ý cho tôi cách bắt đầu bằng cách đa nền tảng không? –

+0

Điều này, và bạn có thể tiêm các biến như một ông chủ: erb <(echo -n '<% somevar = "yay"%>'; cat your.erb) –

23

Viết tập lệnh ruby ​​thực hiện. Các tài liệu API là ở đây: http://www.ruby-doc.org/stdlib/libdoc/erb/rdoc/

Ví dụ:

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

(Trong trường hợp ràng buộc là một ràng buộc với @vars rằng mẫu nhu cầu.)

+0

Cảnh báo - một số phiên bản Ruby không hỗ trợ các tính năng khác nhau của Rails ERB (ví dụ: bỏ qua các kết thúc dòng trống). – lzap

14

Một lựa chọn khác là sử dụng ruby ​​- e, vì ERB itslef rất đơn giản.

Cái gì như:

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

Tuy nhiên, tôi giả sử bạn có một bối cảnh mà bạn muốn làm cho mẫu trong Làm thế nào là bạn mong đợi để có được bối cảnh đó.? Như một ví dụ, hãy kiểm tra:

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

mà sẽ in ra "hello world", sử dụng cấp cao nhất, nơi bạn định nghĩa các biến hello, như các ràng buộc.

0

Tôi đã cố gắng nhận xét về điều này nhưng liên kết nhận xét không khả dụng.

Tôi đang sử dụng này:

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

Từ việc niêm yết trên: và tôi thấy những gì tôi nghĩ nó có thể là một vấn đề:

tôi là tạo ra file BATCH DOS như:

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

Và tôi đã tìm thấy vấn đề kỳ lạ - Tôi nhận được điều này khi tôi chạy với mã ở trên:

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 

Tôi đã thử các sau đây, và có vòng vấn đề cụ thể của tôi - không chắc chắn nếu điều này là câu trả lời đúng cho tất cả mọi người ...

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

Nếu bạn có thể chuyển ERB để Erubis, giải quyết vấn đề của bạn là đơn giản như :

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

tìm thấy câu hỏi này trong khi cố gắng te st my Puppet templates.

Ended với giải pháp này:

  1. Cùng foo.erb bạn tạo một file foo.vars.erb
  2. Đặt tất cả các biến mẫu của bạn vào đó tập tin mới, ví dụ:

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

    hoặc (tương đương):

    <% 
    @my_param="foo bar" 
    @another_param=123 
    %> 
    
  3. Mở dòng lệnh chạy này:

    cat foo.vars.erb foo.erb | erb 
    

mẫu render đầy đủ của bạn bây giờ sẽ được in để std-out. Từ đó bạn kiểm tra đầu ra bằng tay, hoặc bạn có thể sử dụng các công cụ khác (hoặc các công cụ khác) để so sánh nó với đầu ra được hiển thị trước.

+0

Hoàn hảo/cảm ơn. Đây chính xác là trường hợp sử dụng mà tôi đang tìm kiếm (kiểm tra con rối) – JDS