2009-10-27 9 views
11

Tôi đang triển khai ứng dụng Sinatra bằng hành khách. Ứng dụng được triển khai đang hoạt động, nhưng không hoàn toàn: một số đường dẫn hoạt động tốt, một số khác chỉ hiển thị một trang trống. Tôi dường như không thể tìm thấy bất kỳ sự khác biệt lớn giữa các tuyến đường mà làm việc và các tuyến đường mà không làm, và tôi dường như không thể theo dõi bất kỳ lỗi nào ..Gặp sự cố khi gỡ lỗi ứng dụng Sinatra trong sản xuất

Handlers

tôi đã xác định trình xử lý not_found và error như sau:

not_found do 
    '404. Bummer!' 
end 

error do 
    'Nasty error: ' + env['sinatra.error'].name 
end 

Làm việc tốt trên máy cục bộ, cả trong phát triển và sản xuất, nhưng tôi chưa bao giờ thấy chúng xuất hiện trên máy chủ.

Apache Logs

Khi access.log và tôi đuôi của Apache trúng một trong những con đường bị hỏng, tôi nhìn thấy một 500:

helpers [27/Oct/2009:15:54:59 -0400] "GET /admin/member_photos/photos HTTP/1.1" 500 20 "-" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3" 

rack_hoptoad

Tôi cũng đã đã cài đặt và cấu hình phần mềm trung gian rack_hoptoad trong config.ru của tôi, nhưng không có ngoại lệ nào làm cho nó tải xuống.

# Send exceptions to hoptoad 
require 'rack_hoptoad' 
use Rack::HoptoadNotifier, 'MY_API_KEY' 

đăng

tôi đã thiết lập đăng nhập như vậy ..

set :raise_errors => true 
set :logging, true 

log = File.new("log/sinatra.log", "a+") 
STDOUT.reopen(log) 
STDERR.reopen(log) 

require 'logger' 
configure do 
    LOGGER = Logger.new("log/sinatra.log") 
end 

helpers do 
    def logger 
    LOGGER 
    end 
end 

Thiết lập này cho phép tôi gọi logger.info trong tuyến đường của tôi, mà làm việc tại địa phương và trên máy chủ cho các tuyến đường làm việc, nhưng các đường dẫn bị hỏng không nhận được đủ xa để gọi logger.info.

Việc cần làm?

Bất kỳ ý tưởng nào về cách tôi có thể xem nguyên nhân gây ra 500 lỗi là gì? Cảm ơn vì bất kì sự giúp đỡ!

+0

"Stackies"? :-) – SLaks

+1

+1 cho Stackies! – DigitalRoss

+0

Bạn đã thử các ứng dụng đơn giản trên httpd chưa? như ứng dụng 'Thế giới thấp'. chỉ nhận được '/'; 'Làm thế nào thấp trên thế giới', kết thúc Lúc đầu hãy kiểm tra, sau đó tiếp theo ứng dụng của bạn. Vui lòng kiểm tra các ứng dụng đơn giản của bạn trên httpd và tệp cấu hình. bằng cách này, tôi nghĩ rằng bạn không thể nhận được một số bản ghi https trên sinatra. – tknv

Trả lời

6

Tôi sẽ thử sử dụng phần mềm trung gian Rack :: ShowExceptions để thử và theo dõi vấn đề. Trong config.ru của bạn, hãy thêm hai dòng này trước khi cuộc gọi chạy:

require 'rubygems' 
require 'your-app' 

use Rack::ShowExceptions 

run YourApp 

Điều đó sẽ bắt và hiển thị backtrace cho bất kỳ trường hợp ngoại lệ nào xảy ra trong Rack hoặc trong ứng dụng của bạn. Điều đó sẽ cung cấp cho bạn thêm chi tiết để làm việc với, ít nhất đó sẽ là hy vọng.

1

Có thể đã xảy ra sự cố với thiết lập nhật ký của bạn?

Chuyển hướng STDERR khi chạy máy chủ Sinatra để bạn có thể đọc nó. Giống như:

ruby myapp.rb -p 1234 > log/app.log 2>&1 
0

Cảm ơn bạn đã trả lời nhưng tôi không cần phải sử dụng chúng. Ban đầu tôi triển khai ứng dụng trong một sub-URI configuration. Khi tôi triển khai ứng dụng cho tên miền phụ của chính nó thay vào đó, các vấn đề đã biến mất.

Vì vậy, ..Tôi không thực sự chắc chắn vấn đề là gì, nhưng việc loại bỏ dòng này là cấu hình Apache của tôi cho trang web là những gì đã giải quyết:

Redirect permanent/https://www.example.org/admin/member_photos/