2013-05-27 8 views
5

मैं एक कमांड लाइन उपयोगिता के रूप में मशीनीकरण का उपयोग कर एक सरल वेब क्रॉलर Writter गए हैं। तब मैं सिनात्रा साथ वेब अनुप्रयोग बनाने का फैसला किया है, लेकिन जब स्थानीय वेबसर्वर भागने की कोशिश कर इस त्रुटि के साथ अटक गया:मशीनीकरण और सिनात्रा संघर्ष

require 'sinatra' 
require 'mechanize' 

get '/' do 
    # mechanize stuff 
end 

मैंने:

/home/nazar/.rvm/gems/ruby-2.0.0-p195/gems/sinatra-1.4.2/lib/sinatra/base.rb:1569:in `run!': undefined method `run' for HTTP:Module (NoMethodError) 
from /home/nazar/.rvm/gems/ruby-2.0.0-p195/gems/sinatra-1.4.2/lib/sinatra/main.rb:25:in `block in <module:Sinatra>' 

स्रोत कोड मृत सरल है कुछ जांच के माध्यम से चला और पता लगाने के लिए कि 2 जवाहरात अलग से ठीक से काम में कामयाब रहे, लेकिन केवल संयोजन उन्हें इस मुद्दे का कारण बनता है। क्या कोई यह बता सकता है कि समस्या क्या हो सकती है?

+0

के वर्तमान मूल्य पर आधारित है? और पूरा त्रुटि संदेश? मैंने आपका स्रोत कोड सेट अप करने के लिए सेट किया और मुझे कोई त्रुटि नहीं मिली। – fbonetti

+0

मुझे लगता है कि समस्या कोड से संबंधित नहीं है। कम से कम मैंने इसे "हैलो वर्ल्ड" सामान के साथ चलाने की कोशिश की –

उत्तर

3

मशीनीकरण के साथ मिल की तरह अधिकांश शायद आप अधिभावी कर रहे हैं कर रहे हैं तरीकों। अपने सिनात्रा आवेदन को एक आवेदन कक्षा में लपेटने का प्रयास करें। इससे समस्या हल हो सकती है।

require 'sinatra/base' 

class MyApp < Sinatra::Base 
    get '/' do 
    # mechanize stuff 
    end 
end 

Sinatra documentation में उस दृष्टिकोण के बारे में अधिक जानकारी प्राप्त करें।

3

मैं एक ही मुद्दा था और स्थापित करने और अपने स्थानीय वेबसर्वर के रूप में पतला का उपयोग करके इसे हल करने में सक्षम था।

मैं सिनात्रा स्रोत में खोदे गए हैं और देखते हैं कि यह क्या सर्वर का अनुमान लगाना जब चल रहा है उपयोग करने के लिए, क्रम में, आप आईआरबी के माध्यम से देख सकते हैं, जिसमें की कोशिश करता है:

1.9.3p194 :011 > require 'sinatra' 
=> true 
1.9.3p194 :012 > Sinatra::Base 
=> Sinatra::Base 
1.9.3p194 :014 > Sinatra::Base::server 
=> ["thin", "puma", "HTTP", "webrick"] 

आम तौर पर सिनात्रा वापस गिर जाएगा webrick लेकिन मशीनीकरण है एक मॉड्यूल HTTP नामक है, इसलिए यह उस सर्वर के रूप में उपयोग करने का प्रयास करता है, जो निश्चित रूप से काम नहीं करता है।

मैं पतला निर्दिष्ट करने के लिए एक run.sh लिपि में इस का उपयोग कर रहा:

rerun -- thin start --port=4567 -R config.ru 
0

iltempo और user2632580 से उल्लेख किया है, कारण यह विफल रहता है सर्वर की सूची सिनात्रा डिफ़ॉल्ट रूप से कोशिश करता है, HTTP पर विफल रहने के है जो मैकेनाइज मणि overriden है।

इस पर काबू पाने के लिए वैकल्पिक विकल्प http://www.sinatrarb.com/configuration.html पर प्रलेखन के अनुसार प्रयास करने के लिए सिनात्रा के लिए सर्वर की एक अलग सूची प्रदान करना है (देखें "अंतर्निहित सेटिंग्स"> "सर्वर:")।

उदाहरण स्क्रिप्ट: यदि आप अपने कोड के और अधिक पोस्ट कर सकते हैं

require 'sinatra' 
require 'mechanize' 

set :server, %w[thin puma reel webrick] 

get '/' do 
    "Hello world!" 
end 

उदाहरण में इस सूची में Sinatra::Base::server शून्य से HTTP

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