2013-12-17 16 views
8

En fazla bu hatadır: undefined method 'desc' for Sinatra::Application:Classtanımsız yöntem `Sinatra :: Uygulaması desc': Herhangi <code>rake</code> komutu çalıştırdığınızda Sınıf

# 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' 

Tam iz:

/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

Nerede geri izleme yapar –

+0

Backtrace ve Gemfile eklendi. – jamesfzhang

+1

ve ./app içinde neler var? – phoet

cevap

10

Sinatra dan Sinatra namespace extension Rake'in kendi isim-alanı desteğiyle katkıda bulunmaktır. Her ikisi de bir namespace yöntemini tanımlar ve Sinatra katkısı sürümü Sinatra-ActiveRecord Rake tasks'dan (yanlış) çağrılır.

Sinatra-contrib'ın ad alanlarını kullanmıyorsanız, en kolay çözüm only require those extensions that you need; Örneğin. değiştirmek

require 'sinatra/contrib' 

sonra Sinatra ad alanlarını kullanıyorsanız Sana bir modular style app taşınarak Bu almak mümkün olabilir düşünüyorum

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

için. içinde Sonra

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 

böyle bir şey için app.rb değiştirme senin config.ru sen run MyApp gerek ziyade run Sinatra::Application (tabi ki - ve gereken - senin sınıf daha iyi bir isim vermek). Bu, iki namespace yönteminin çarpışmasını engeller, çünkü Sinatra sürümü sadece uygulama sınıfınızda değil, en üst düzeyde kullanılabilir.

Juste istenen koşullara ekleyin:: false niteliğini sinatra contrib için gemfile içinde:

gem "sinatra-contrib",require: false 

bu burada Bulunan:

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

+0

Modüler bir uygulama yürütüyordum, ancak 'sinatra/base' özel gereksinimini unuttum. Teşekkürler, kurtarıldım! – aledalgrande

14

bir kolay çözüm Bulunan puan?
+2

Bir Rails uygulamasında yapılan testler için harici bir API alay etmede Sinatra kullanıyorum ve aynı zamanda global olarak, benim Gemfile'ımdan 'sinatra' ve 'sinatra-contrib' ile aynı sorunla karşılaştım. Bu onu tamir ediyor! Teşekkürler :) – mltsy