2013-12-17 5 views
8

Это ошибка, я получаю, когда я запустить любую rake команду: undefined method 'desc' for Sinatra::Application:Classнеопределенный метод `убывание» для Sinatra :: Применение: Класс

# 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

Добавлен backtrace и Gemfile. – jamesfzhang

+1

и что находится ./app? – phoet

ответ

10

Sinatra namespace extension от Синатры Contrib вмешивается в собственную поддержку пространства имен Rake. Оба они определяют метод namespace, а версия Sinatra contrib вызывается (неправильно) из Sinatra-ActiveRecord Rake tasks.

Если вы не используете пространства имен из Sinatra-contrib, то самым простым решением будет only require those extensions that you need; например изменить

require 'sinatra/contrib' 

в

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

Если вы используете Синатра пространств имен, то я думаю, что вы можете быть в состоянии обойти это путем перехода к modular style app. Изменение app.rb к чему-то вроде

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 

Затем в config.ru вам нужно run MyApp, а затем run Sinatra::Application (конечно, вы можете - и должны - дать своему классу лучшее название). Это позволяет избежать столкновения двух методов namespace, так как версия Sinatra доступна только в вашем классе приложения, а не на верхнем уровне.

+0

Я работал с модульным приложением, но забыл о специфическом требовании 'sinatra/base'. Спасибо, спасли меня! – aledalgrande

14

Обнаружили простое решение:

Juste добавить требуется: ложный атрибут Синатра вно в вашем Gemfile:

gem "sinatra-contrib",require: false 

Нашел здесь:

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

+2

Я использую Sinatra для издевательства внешнего API для тестов в приложении Rails и имел ту же проблему с 'sinatra' и' sinatra-contrib', которые требуются по умолчанию по умолчанию из моего Gemfile. Это исправляет! Благодаря :) – mltsy

Смежные вопросы