2013-03-26 18 views
6

Khi gọi chính sinatra, $ ruby tubemp.rb hoạt động. Nhưng thông qua rackup nó không. Ứng dụng, bằng cách nào đó không thể tìm thấy các mẫu nội tuyến.Sinatra thông qua rackup không giống như các mẫu nội tuyến

#config.ru 
require 'rubygems' 
require 'sinatra' 

set :environment, ENV['RACK_ENV'].to_sym 
disable :run, :reload 

require './tubemp.rb' 

run Sinatra::Application 

Các lỗi được trả lại là:

No such file or directory - /home/ber/Documenten/ET_tubemp/code/views/index.erb: 

phần có liên quan từ tubemp.rb

get '/' do 
    #... 
    erb :index 
end 

__END__ 
@@ layout 
<html> 
... 
<%= yield %> 

@@ index 
Welcome! 

Bằng cách nào đó, qua rackup, họ hy vọng các quan điểm sống trong thực tế xem tập tin. Tôi đoán rackup không thể xử lý các mã thông báo __END__ khi bao gồm hoặc như vậy.

Làm cách nào để giải quyết vấn đề này, sau đó chuyển mẫu của tôi sang tệp mẫu?

Trả lời

4

Từ the docs:

mẫu Inline được định nghĩa trong tập tin nguồn mà đòi hỏi Sinatra sẽ được tự động nạp. Hãy gọi enable :inline_templates một cách rõ ràng nếu bạn có mẫu nội tuyến trong các tệp nguồn khác.

Trong trường hợp này, khi bạn sử dụng rackup nó là config.ru của bạn mà các cuộc gọi require 'sinatra', và Sinatra đang tìm kiếm trong tập tin cho bất kỳ mẫu, và không tìm thấy bất kỳ. Khi bạn chạy tập tin ứng dụng của bạn trực tiếp tìm kiếm Sinatra tubemp.rb cho các mẫu, và tìm thấy chúng.

Để khắc phục nó, thêm

enable :inline_templates 

đến file tubemp.rb của bạn (và bất kỳ tập tin nguồn khác mà có mẫu inline).

Các vấn đề liên quan