2012-03-20 11 views
7
require 'sinatra/base' 

class Foo < Sinatra::Base 
    get('/foo') { 'foo' } 
end 

class Bar < Sinatra::Base 
    get('/bar') { 'bar' } 
end 

run Rack::Cascade, [Foo, Bar] 

मैं अनुमान नहीं लगा सकता कि इस कोड में क्या गलत है। जब मैं भागा: गहरे लाल रंग का server.rb, यह एक त्रुटिमुख्य के लिए अपरिभाषित विधि 'रन': ऑब्जेक्ट (NoMethodError) सिनात्रा

उत्तर

10

सबसे पहले फेंकता है, अंतिम पंक्ति पढ़ना चाहिए

run Rack::Cascade.new [Foo, Bar] 

लेकिन आप केवल एक Rackup फ़ाइल में इसका उपयोग कर सकते हैं। तो दूसरे, आप निम्न सामग्री के साथ एक फ़ाइल बुलाया config.ru (Rackup फ़ाइल) बनाने की जरूरत:

require './app' 
run Rack::Cascade.new [Foo, Bar] 

और एक फ़ाइल को अपने वास्तविक अनुप्रयोग के साथ app.rb कहा जाता है:

require 'sinatra/base' 

class Foo < Sinatra::Base 
    get('/foo') { 'foo' } 
end 

class Bar < Sinatra::Base 
    get('/bar') { 'bar' } 
end 

तो आप

$ rackup 
>> Thin web server (v1.3.1 codename Triple Espresso) 
>> Maximum connections set to 1024 
>> Listening on 0.0.0.0:9292, CTRL+C to stop 
उसके बाद

कमांड लाइन में टाइप करके सर्वर शुरू कर सकते हैं, एक दूसरे कमांड लाइन विंडो खोलें और अपने ऐप का परीक्षण:

$ curl 0.0.0.0:9292/foo 
foo% 
$ curl 0.0.0.0:9292/bar 
bar%  
+0

धन्यवाद इससे मदद मिली। मैं सिनात्रा के लिए नया हूँ। उदाहरण के लिए "रन रैक :: कैस्केड [फू, बार]" था, बिना "। नया"। शायद यह गलत वाक्य या sinatra के पिछले संस्करण इस तरह के वाक्यविन्यास इस्तेमाल किया गया था। – user1136228

+0

आपका स्वागत है। जब आप केवल परीक्षण कर रहे हैं, तो आप config.ru में सभी कोड भी लिख सकते हैं, लेकिन मुझे लगता है कि इसे खराब अभ्यास माना जाता है। –

+0

और है। मॉड्यूलर सिनात्रा ऐप्स बनाने के लिए यह एक अच्छा अभ्यास है, जैसे कि रेल ऐप संरचना (नियंत्रक, विचार, सहायक, lib, सार्वजनिक फ़ोल्डर्स) के साथ? – user1136228

संबंधित मुद्दे