这是我运行任何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' /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 ` ' /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 ` ' /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 ` ' /Users/j/.rvm/gems/ruby-2.0.0-p247@global/gems/rake-10.1.0/lib/rake/rake_module.rb:25:in `load' /Users/j/.rvm/gems/ruby-2.0.0-p247@global/gems/rake-10.1.0/lib/rake/rake_module.rb:25:in `load_rakefile' /Users/j/.rvm/gems/ruby-2.0.0-p247@global/gems/rake-10.1.0/lib/rake/application.rb:637:in `raw_load_rakefile' /Users/j/.rvm/gems/ruby-2.0.0-p247@global/gems/rake-10.1.0/lib/rake/application.rb:94:in `block in load_rakefile' /Users/j/.rvm/gems/ruby-2.0.0-p247@global/gems/rake-10.1.0/lib/rake/application.rb:165:in `standard_exception_handling' /Users/j/.rvm/gems/ruby-2.0.0-p247@global/gems/rake-10.1.0/lib/rake/application.rb:93:in `load_rakefile' /Users/j/.rvm/gems/ruby-2.0.0-p247@global/gems/rake-10.1.0/lib/rake/application.rb:77:in `block in run' /Users/j/.rvm/gems/ruby-2.0.0-p247@global/gems/rake-10.1.0/lib/rake/application.rb:165:in `standard_exception_handling' /Users/j/.rvm/gems/ruby-2.0.0-p247@global/gems/rake-10.1.0/lib/rake/application.rb:75:in `run' /Users/j/.rvm/gems/ruby-2.0.0-p247@global/gems/rake-10.1.0/bin/rake:33:in ` ' /Users/j/.rvm/gems/ruby-2.0.0-p247@global/bin/rake:23:in `load' /Users/j/.rvm/gems/ruby-2.0.0-p247@global/bin/rake:23:in ` ' /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 ` '
tomsoft.. 17
找到最简单的解决方案:
Juste将gem:false属性添加到gemfile中的sinatra contrib:
gem "sinatra-contrib",require: false
在这里找到:
http://aaronlerch.github.io/blog/sinatra-bundler-and-the-global-namespace/
来自Sinatra contrib 的Sinatra命名空间扩展正在干扰Rake自己的命名空间支持.它们都定义了一个namespace
方法,并且从Sinatra-ActiveRecord Rake任务中调用Sinatra contrib版本(错误地).
如果你没有使用Sinatra-contrib的命名空间,那么最简单的解决方案就是只需要那些你需要的扩展 ; 例如改变
require 'sinatra/contrib'
至
require 'sinatra/whatever' require 'sinatra/anotherextension'
如果您正在使用Sinatra名称空间,那么我认为您可以通过转移到模块化样式应用程序来解决这个问题.改变你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版本仅在您的应用程序类中可用,而不是顶级.
找到最简单的解决方案:
Juste将gem:false属性添加到gemfile中的sinatra contrib:
gem "sinatra-contrib",require: false
在这里找到:
http://aaronlerch.github.io/blog/sinatra-bundler-and-the-global-namespace/