2010-09-18 19 views
5

Tôi khá mới đối với ngôn ngữ Ruby (cho đến bây giờ tôi đã phát triển trong Groovy + Grails) nhưng vì tôi tò mò về nó, tôi muốn thử Sinatra trên Ruby 1.9.2 -p0.Sinatra không thể tìm thấy quan điểm trên Ruby 1.9.2-p0

Tôi có một trang web tầm thường được chứa trong /mywebpage và có 2 file:

# blog.rb 
get '/' do 
    'Hello World!' 
end 

get '/impossible' do 
    haml :index 
end 

#config.ru 
path = File.expand_path "../", __FILE__ 

$LOAD_PATH << (File.expand_path ".") + "/views" 

require 'haml' 
require 'sinatra' 
require "#{path}/blog" 

run Sinatra::Application 

sau đó trong cùng một thư mục Tôi có một thư mục có chứa /views/index.haml.

tôi cố gắng để chạy các máy chủ với rackup -p8080 nhưng khi tôi cố gắng để có được /impossible tôi nhận được lỗi sau:

Errno::ENOENT at /impossible 
No such file or directory - /home/jack/mywebpage/<internal:lib/rubygems/views/index.haml 

Bằng cách tìm kiếm trên Internet có vẻ như điều này có lẽ do "" không được bao gồm trong $LOAD_PATH vì vậy tôi đã cố gắng thêm hoặc thêm trực tiếp chế độ xem ./views để thực tế $LOAD_PATH.inspect cung cấp cho tôi đường dẫn chính xác: ..., "/home/jack/mywebpage/views"]

Nhưng nó vẫn không hoạt động. Khá mới mẻ đối với khuôn khổ và ngôn ngữ tôi đã tự hỏi liệu tôi có đang làm gì sai không. bất kì manh mối nào?

Trả lời

12

Chạy Sinatra với Ruby 1.9.2 thư mục mẫu không còn là 'chế độ xem' nữa, bạn cần tự thiết lập.

set :views, File.dirname(__FILE__) + "/views" 

Lưu ý rằng hiện Ruby cũng có Kernel#__dir__() phương pháp đó là tương đương với File.dirname(__FILE__).

0

Tôi đã chạy vào tuần trước đó và không tìm thấy một bản sửa lỗi phù hợp trên trang web Sinatra không được chỉnh sửa mã sinatra. Tôi đang sử dụng rvm cho sự phát triển của mình và chuyển sang dùng thử sinatra trên Ruby 1.8.7 và nó hoạt động tốt một lần nữa, vì vậy đó là nơi tôi để nó lại.

Ồ, vì bạn mới sử dụng Ruby, bạn có thể không biết về rvm, vì vậy đây là điểm yếu. RVM chỉ dành cho Mac và được khuyên dùng để quản lý phiên bản Ruby và đá quý của bạn. Nó làm cho nó tầm thường để có nhiều phiên bản Ruby và các nhóm đá quý thay thế để phát triển và thử nghiệm. Tất cả mọi thứ được lưu trữ trong thư mục ~/.rvm của bạn để dễ dàng thổi nó đi nếu bạn cần.

http://rvm.beginrescueend.com/

Tôi chỉ nhìn vào trang web của Sinatra một lần nữa về vấn đề này để xem nếu có bất cứ điều gì mới, nhưng có vẻ họ xem xét sau đây là một sửa chữa có thể chấp nhận:

http://github.com/sinatra/sinatra/issues/#issue/50

Tôi có một chút bất lợi khi phải chỉnh sửa nguồn gốc của Sinatra theo khuyến cáo của vấn đề # 50, nhưng nó không thực sự khó làm. Tôi muốn thấy họ đưa ra bản cập nhật để chúng tôi có một bản sửa lỗi chính thức nhưng tôi chưa thấy bất kỳ điều gì:

gem env sẽ cho bạn biết "GEM PATHS". Đá quý của Sinatra sẽ là một trong số đó. Dòng được đề cập trong số 50 đi vào base.rb. Trên máy của tôi, nó giống như là ...gems/ruby-1.9.2-p0/gems/sinatra-1.0/lib/sinatra/base.rb.

Insert:

 
    /<internal:/, # ruby 1.9.2-p0 hacks 
tại dòng 1020.

Lưu tập tin và bạn sẽ được tốt để đi.

+0

RVM chỉ dành cho Mac? Điều đó mới đối với tôi ... Nó sẽ hoạt động trên Linux, và có lẽ là bất kỳ hệ thống nào khác với môi trường xây dựng và phát triển của GCC. Điều này bao gồm các hệ thống như FreeBSD, OpenBSD, Solaris và thậm chí cả Windows với Cygwin. Nó sẽ hoạt động ít nhất, nhưng không được hỗ trợ trên các hệ thống khác với Linux và OS X, và nó chắc chắn không chỉ dành cho Mac. Ồ, và có phần mềm tương tự cho Windows được gọi là Pik. – AboutRuby

+0

Đó là một sai lầm về phía tôi. Tôi đã nhớ nó không có sẵn trên Windows, nhưng quên tôi có nó chạy trên hộp Linux của tôi. –

1

Tôi đã gặp sự cố tương tự và đã giải quyết vấn đề như this. Tôi đã không tìm hiểu vấn đề, nhưng đây là những gì tôi tìm thấy và nó hoạt động. Nó được cho là sẽ được sửa trong phiên bản tiếp theo của Sinatra (mà họ thực sự nên thoát ra khỏi cửa, chỉ để sửa vài lỗi này là 1.9.2).

#!/usr/bin/env ruby 
require 'rubygems' 
require 'sinatra' 

enable :run 

get '/' do 
    "Hello, world!" 
end 

Chỉnh sửa: Có vẻ như có nhiều lỗi với Sinatra trên 1.9.2. Điều này sẽ khắc phục các ứng dụng Sinatra không bắt đầu từ phiên bản 1.9.2. Tôi không sử dụng thư mục lượt xem (tôi muốn giữ đơn ứng dụng của mình), vì vậy tôi đã không gặp sự cố cụ thể của bạn. Sửa chữa này rất có thể sẽ không giúp bạn gì cả. Có thể tôi đã đọc vấn đề của bạn chặt chẽ hơn ..

3

Điều này và các vấn đề khác với 1,9, sẽ là đã được giải quyết trong Sinatra 1.1. Bạn có thể sử dụng ngã ba này: http://github.com/rkh/sinatra/tree/1.1

+0

Cập nhật: Tôi đã gặp vấn đề này với Sinatra 1.0 (đã có nó như là một viên ngọc của nhà cung cấp) và có thể xác nhận rằng điều này đã được sửa bằng cách cập nhật lên Sinatra v1.1.2. Bạn không còn cần một cái nĩa đặc biệt nữa; viên ngọc chính thức được cập nhật. – Phrogz

1
gem install sinatra --pre 
Các vấn đề liên quan