2013-12-17 5 views
8

यह त्रुटि मैं मिलता है जब मैं किसी भी rake कमांड चलाएँ: undefined method 'desc' for Sinatra::Application:Classअपरिभाषित विधि `सिनात्रा :: आवेदन के लिए की वर्णन ': कक्षा

# app.rb 
require 'sinatra' 
require 'sinatra/activerecord' 
require 'sinatra/contrib' 

get '/' do 
    puts "Hello World" 
end 

# config.ru 
require "./app" 
run Sinatra::Application 

# Rakefile 
require './app' 
require 'sinatra/activerecord/rake' 

# Gemfile 
source 'https://rubygems.org' 
ruby '2.0.0' 

gem 'activerecord', '~> 4.0.2' 
gem 'sinatra', '~> 1.4.4' 
gem 'sinatra-activerecord', '~> 1.2.3' 
gem 'sinatra-contrib', '~> 1.4.2' 

पूर्ण ट्रेस: ​​

/Users/j/.rvm/gems/ruby-2.0.0-p247/gems/sinatra-contrib-1.4.2/lib/sinatra/namespace.rb:269:in `method_missing' 
/Users/j/.rvm/gems/ruby-2.0.0-p247/gems/sinatra-activerecord-1.2.3/lib/sinatra/activerecord/tasks.rake:4:in `block in <top (required)>' 
/Users/j/.rvm/gems/ruby-2.0.0-p247/gems/sinatra-contrib-1.4.2/lib/sinatra/namespace.rb:126:in `class_eval' 
/Users/j/.rvm/gems/ruby-2.0.0-p247/gems/sinatra-contrib-1.4.2/lib/sinatra/namespace.rb:126:in `block in new' 
/Users/j/.rvm/gems/ruby-2.0.0-p247/gems/sinatra-contrib-1.4.2/lib/sinatra/namespace.rb:118:in `initialize' 
/Users/j/.rvm/gems/ruby-2.0.0-p247/gems/sinatra-contrib-1.4.2/lib/sinatra/namespace.rb:118:in `new' 
/Users/j/.rvm/gems/ruby-2.0.0-p247/gems/sinatra-contrib-1.4.2/lib/sinatra/namespace.rb:118:in `new' 
/Users/j/.rvm/gems/ruby-2.0.0-p247/gems/sinatra-contrib-1.4.2/lib/sinatra/namespace.rb:142:in `namespace' 
/Users/j/.rvm/gems/ruby-2.0.0-p247/gems/sinatra-1.4.4/lib/sinatra/base.rb:1972:in `block (2 levels) in delegate' 
/Users/j/.rvm/gems/ruby-2.0.0-p247/gems/sinatra-activerecord-1.2.3/lib/sinatra/activerecord/tasks.rake:3:in `<top (required)>' 
/Users/j/.rvm/gems/ruby-2.0.0-p247/gems/activesupport-4.0.2/lib/active_support/dependencies.rb:223:in `load' 
/Users/j/.rvm/gems/ruby-2.0.0-p247/gems/activesupport-4.0.2/lib/active_support/dependencies.rb:223:in `block in load' 
/Users/j/.rvm/gems/ruby-2.0.0-p247/gems/activesupport-4.0.2/lib/active_support/dependencies.rb:214:in `load_dependency' 
/Users/j/.rvm/gems/ruby-2.0.0-p247/gems/activesupport-4.0.2/lib/active_support/dependencies.rb:223:in `load' 
/Users/j/.rvm/gems/ruby-2.0.0-p247/gems/sinatra-activerecord-1.2.3/lib/sinatra/activerecord/rake.rb:77:in `<top (required)>' 
/Users/j/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/site_ruby/2.0.0/rubygems/core_ext/kernel_require.rb:51:in `require' 
/Users/j/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/site_ruby/2.0.0/rubygems/core_ext/kernel_require.rb:51:in `require' 
/Users/j/.rvm/gems/ruby-2.0.0-p247/gems/backports-3.3.5/lib/backports/tools.rb:328:in `require_with_backports' 
/Users/j/.rvm/gems/ruby-2.0.0-p247/gems/activesupport-4.0.2/lib/active_support/dependencies.rb:229:in `block in require' 
/Users/j/.rvm/gems/ruby-2.0.0-p247/gems/activesupport-4.0.2/lib/active_support/dependencies.rb:214:in `load_dependency' 
/Users/j/.rvm/gems/ruby-2.0.0-p247/gems/activesupport-4.0.2/lib/active_support/dependencies.rb:229:in `require' 
/Users/j/Desktop/app/Rakefile:2:in `<top (required)>' 
/Users/j/.rvm/gems/[email protected]/gems/rake-10.1.0/lib/rake/rake_module.rb:25:in `load' 
/Users/j/.rvm/gems/[email protected]/gems/rake-10.1.0/lib/rake/rake_module.rb:25:in `load_rakefile' 
/Users/j/.rvm/gems/[email protected]/gems/rake-10.1.0/lib/rake/application.rb:637:in `raw_load_rakefile' 
/Users/j/.rvm/gems/[email protected]/gems/rake-10.1.0/lib/rake/application.rb:94:in `block in load_rakefile' 
/Users/j/.rvm/gems/[email protected]/gems/rake-10.1.0/lib/rake/application.rb:165:in `standard_exception_handling' 
/Users/j/.rvm/gems/[email protected]/gems/rake-10.1.0/lib/rake/application.rb:93:in `load_rakefile' 
/Users/j/.rvm/gems/[email protected]/gems/rake-10.1.0/lib/rake/application.rb:77:in `block in run' 
/Users/j/.rvm/gems/[email protected]/gems/rake-10.1.0/lib/rake/application.rb:165:in `standard_exception_handling' 
/Users/j/.rvm/gems/[email protected]/gems/rake-10.1.0/lib/rake/application.rb:75:in `run' 
/Users/j/.rvm/gems/[email protected]/gems/rake-10.1.0/bin/rake:33:in `<top (required)>' 
/Users/j/.rvm/gems/[email protected]/bin/rake:23:in `load' 
/Users/j/.rvm/gems/[email protected]/bin/rake:23:in `<main>' 
/Users/j/.rvm/gems/ruby-2.0.0-p247/bin/ruby_executable_hooks:15:in `eval' 
/Users/j/.rvm/gems/ruby-2.0.0-p247/bin/ruby_executable_hooks:15:in `<main>' 
+0

कहाँ पश्व-अनुरेखन करता है बिंदु? –

+0

बैकट्रैक और जेमफाइल जोड़ा गया। – jamesfzhang

+1

और क्या है ./app? – phoet

उत्तर

10

Sinatra namespace extension सिनात्रा से रेक के अपने नेमस्पेस समर्थन में हस्तक्षेप कर रहा है। वे दोनों namespace विधि को परिभाषित करते हैं, और Sinatra-ActiveRecord Rake tasks से सिनात्रा contrib संस्करण (गलत तरीके से) कहा जा रहा है।

यदि आप सिनात्रा-कॉन्ट्रिब से नामस्थान का उपयोग नहीं कर रहे हैं, तो सबसे आसान समाधान only require those extensions that you need होगा; जैसे बदल

require 'sinatra/contrib' 

आप तो सिनात्रा नामस्थान उपयोग कर रहे हैं मैं तुम्हें एक modular style app में जाने से इस दौर प्राप्त करने में सक्षम हो सकता है लगता है

require 'sinatra/whatever' 
require 'sinatra/anotherextension' 

करने के लिए। जैसे

require 'sinatra/base' # note this has changed from just 'sinatra' 
require 'sinatra/activerecord' 
require 'sinatra/contrib' 

class MyApp < Sinatra::Base 
    register Sinatra::Contrib 

    get '/' do 
    "Hello World" 
    end 

    # other routes etc. as needed 
end 
तब में

कुछ करने के लिए अपने app.rb बदलें अपनी config.ru आप run MyApp की जरूरत नहीं बल्कि उसके बाद run Sinatra::Application (बेशक आप कर सकते हैं - और चाहिए - अपनी कक्षा एक बेहतर नाम दें)। यह दो namespace विधियों की टक्कर से बचाता है, क्योंकि सिनात्रा संस्करण केवल आपके आवेदन वर्ग में उपलब्ध है, न कि शीर्ष स्तर पर।

+0

मैं एक मॉड्यूलर ऐप चला रहा था, लेकिन 'sinatra/base' विशिष्ट आवश्यकताएं भूल गया। धन्यवाद, मुझे बचाया! – aledalgrande

14

मिले एक सबसे आसान समाधान: सिनात्रा योगदान करने के लिए झूठी विशेषता अपने gemfile में:

जस्ट जोड़ने की आवश्यकता होती है

gem "sinatra-contrib",require: false 

मिले इस यहाँ:

http://aaronlerch.github.io/blog/sinatra-bundler-and-the-global-namespace/

+2

मैं एक रेल ऐप में परीक्षण के लिए बाहरी एपीआई का नकल करने के लिए सिनात्रा का उपयोग कर रहा हूं, और मेरे जेमफाइल से, डिफ़ॉल्ट रूप से, 'sinatra' और' sinatra-contrib 'के साथ एक ही समस्या थी, डिफ़ॉल्ट रूप से। यह ठीक करता है! धन्यवाद :) – mltsy

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