Ruby Can';不要用Sinatra启动Mongoid
我试图在Sinatra应用程序中开始使用Mongoid,但看起来我遇到了依赖性问题。如果有帮助的话,我在MacBookPro上使用RVM并运行Ruby 1.9.3 以下是我在运行$ruby config.ru后遇到的错误:Ruby Can';不要用Sinatra启动Mongoid,ruby,sinatra,mongoid,Ruby,Sinatra,Mongoid,我试图在Sinatra应用程序中开始使用Mongoid,但看起来我遇到了依赖性问题。如果有帮助的话,我在MacBookPro上使用RVM并运行Ruby 1.9.3 以下是我在运行$ruby config.ru后遇到的错误: /Users/duncanmalashock/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/rubygems/specification.rb:1637:in `raise_if_conflicts': Unable to activa
/Users/duncanmalashock/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/rubygems/specification.rb:1637:in `raise_if_conflicts': Unable to activate mongoid-3.0.23, because activemodel-4.0.0 conflicts with activemodel (~> 3.1) (Gem::LoadError)
from /Users/duncanmalashock/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/rubygems/specification.rb:746:in `activate'
from /Users/duncanmalashock/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/rubygems.rb:212:in `rescue in try_activate'
from /Users/duncanmalashock/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/rubygems.rb:209:in `try_activate'
from /Users/duncanmalashock/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/rubygems/custom_require.rb:59:in `rescue in require'
from /Users/duncanmalashock/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/rubygems/custom_require.rb:35:in `require'
from /Users/duncanmalashock/Penumbra/penumbra.rb:4:in `<top (required)>'
from /Users/duncanmalashock/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
from /Users/duncanmalashock/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
from config.ru:2:in `<main>'
require 'sinatra'
require './penumbra'
run Sinatra::Application
config.ru:
/Users/duncanmalashock/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/rubygems/specification.rb:1637:in `raise_if_conflicts': Unable to activate mongoid-3.0.23, because activemodel-4.0.0 conflicts with activemodel (~> 3.1) (Gem::LoadError)
from /Users/duncanmalashock/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/rubygems/specification.rb:746:in `activate'
from /Users/duncanmalashock/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/rubygems.rb:212:in `rescue in try_activate'
from /Users/duncanmalashock/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/rubygems.rb:209:in `try_activate'
from /Users/duncanmalashock/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/rubygems/custom_require.rb:59:in `rescue in require'
from /Users/duncanmalashock/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/rubygems/custom_require.rb:35:in `require'
from /Users/duncanmalashock/Penumbra/penumbra.rb:4:in `<top (required)>'
from /Users/duncanmalashock/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
from /Users/duncanmalashock/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
from config.ru:2:in `<main>'
require 'sinatra'
require './penumbra'
run Sinatra::Application
档案:
source :rubygems
source :rubyforge
# Thin Server
gem 'thin'
# Sinatra
gem 'sinatra'
gem 'sinatra-contrib', :require => 'sinatra/multi_route'
gem 'sinatra-partial', :require => 'sinatra/partial'
gem 'sinatra-reloader'
# MongoDB
gem "mongoid"
# Shopify
gem 'shopify_api'
半影图.rb:
require 'sinatra'
require 'shopify_api'
require 'mongo'
require 'mongoid'
require 'json'
require "sinatra/reloader" if development?
Mongoid.load!("./mongoid.yml", :production)
def isactivepage(link_name)
if (link_name == @page_name)
return ' activelink'
else return ''
end
end
get '/' do
@page_name = "Home"
erb :"pages/index"
end
get '/about' do
@page_name = "About"
erb :"pages/about"
end
运行$bundle exec rackup后:
/Users/duncanmalashock/.rvm/gems/ruby-1.9.3-p448/gems/mongoid-1.0.6/lib/mongoid.rb:68:in `method_missing': undefined method `load!' for #<Mongoid::Config:0x007fc0838cb1d0> (NoMethodError)
from /Users/duncanmalashock/Penumbra/penumbra.rb:9:in `<top (required)>'
from /Users/duncanmalashock/Penumbra/config.ru:2:in `require'
from /Users/duncanmalashock/Penumbra/config.ru:2:in `block in <main>'
from /Users/duncanmalashock/.rvm/gems/ruby-1.9.3-p448/gems/rack-1.5.2/lib/rack/builder.rb:55:in `instance_eval'
from /Users/duncanmalashock/.rvm/gems/ruby-1.9.3-p448/gems/rack-1.5.2/lib/rack/builder.rb:55:in `initialize'
from /Users/duncanmalashock/Penumbra/config.ru:in `new'
from /Users/duncanmalashock/Penumbra/config.ru:in `<main>'
from /Users/duncanmalashock/.rvm/gems/ruby-1.9.3-p448/gems/rack-1.5.2/lib/rack/builder.rb:49:in `eval'
from /Users/duncanmalashock/.rvm/gems/ruby-1.9.3-p448/gems/rack-1.5.2/lib/rack/builder.rb:49:in `new_from_string'
from /Users/duncanmalashock/.rvm/gems/ruby-1.9.3-p448/gems/rack-1.5.2/lib/rack/builder.rb:40:in `parse_file'
from /Users/duncanmalashock/.rvm/gems/ruby-1.9.3-p448/gems/rack-1.5.2/lib/rack/server.rb:277:in `build_app_and_options_from_config'
from /Users/duncanmalashock/.rvm/gems/ruby-1.9.3-p448/gems/rack-1.5.2/lib/rack/server.rb:199:in `app'
from /Users/duncanmalashock/.rvm/gems/ruby-1.9.3-p448/gems/rack-1.5.2/lib/rack/server.rb:314:in `wrapped_app'
from /Users/duncanmalashock/.rvm/gems/ruby-1.9.3-p448/gems/rack-1.5.2/lib/rack/server.rb:250:in `start'
from /Users/duncanmalashock/.rvm/gems/ruby-1.9.3-p448/gems/rack-1.5.2/lib/rack/server.rb:141:in `start'
from /Users/duncanmalashock/.rvm/gems/ruby-1.9.3-p448/gems/rack-1.5.2/bin/rackup:4:in `<top (required)>'
from /Users/duncanmalashock/.rvm/gems/ruby-1.9.3-p448/bin/rackup:23:in `load'
from /Users/duncanmalashock/.rvm/gems/ruby-1.9.3-p448/bin/rackup:23:in `<main>'
/Users/duncanmalaschock/.rvm/gems/ruby-1.9.3-p448/gems/mongoid-1.0.6/lib/mongoid.rb:68:in'method_missing':未定义的方法'load!'对于#(命名者)
from/Users/duncanmalaschock/Penumbra/Penumbra.rb:9:in`'
from/Users/duncanmalaschock/Penumbra/config.ru:2:in'require'
from/Users/duncanmalaschock/Penumbra/config.ru:2:in'block in'
from/Users/duncanmalaschock/.rvm/gems/ruby-1.9.3-p448/gems/rack-1.5.2/lib/rack/builder.rb:55:in'instance_eval'
from/Users/duncanmalaschock/.rvm/gems/ruby-1.9.3-p448/gems/rack-1.5.2/lib/rack/builder.rb:55:在“初始化”中
from/Users/duncanmalaschock/Penumbra/config.ru:in'new'
from/Users/duncanmalaschock/Penumbra/config.ru:in`'
from/Users/duncanmalaschock/.rvm/gems/ruby-1.9.3-p448/gems/rack-1.5.2/lib/rack/builder.rb:49:in'eval'
from/Users/duncanmalaschock/.rvm/gems/ruby-1.9.3-p448/gems/rack-1.5.2/lib/rack/builder.rb:49:in'new_from_string'
from/Users/duncanmalaschock/.rvm/gems/ruby-1.9.3-p448/gems/rack-1.5.2/lib/rack/builder.rb:40:in“parse_file”
from/Users/duncanmalaschock/.rvm/gems/ruby-1.9.3-p448/gems/rack-1.5.2/lib/rack/server.rb:277:in“build\u app\u和\u options\u from\u config”
from/Users/duncanmalaschock/.rvm/gems/ruby-1.9.3-p448/gems/rack-1.5.2/lib/rack/server.rb:199:in'app'
from/Users/duncanmalaschock/.rvm/gems/ruby-1.9.3-p448/gems/rack-1.5.2/lib/rack/server.rb:314:in'wrapped_app'
from/Users/duncanmalaschock/.rvm/gems/ruby-1.9.3-p448/gems/rack-1.5.2/lib/rack/server.rb:250:在“开始”中
from/Users/duncanmalaschock/.rvm/gems/ruby-1.9.3-p448/gems/rack-1.5.2/lib/rack/server.rb:141:在“开始”中
from/Users/duncanmalaschock/.rvm/gems/ruby-1.9.3-p448/gems/rack-1.5.2/bin/rackup:4:in`'
from/Users/duncanmalaschock/.rvm/gems/ruby-1.9.3-p448/bin/rackup:23:in'load'
from/Users/duncanamalaschock/.rvm/gems/ruby-1.9.3-p448/bin/rackup:23:in`'
您有一个Gemfile
,但您没有使用Bundler启动应用程序,这就是为什么会发生冲突
当前版本的shopify_api
(3.0.3)依赖于activemodel
,通过activeresource
使用。在您的系统上安装了Rails 4,因此加载了activemodel
4.0
当前版本的mongoid
也依赖于activemodel
,但这次是
这两个版本要求不兼容,因此会出现错误activemodel-4.0.0与activemodel(~>3.1)
要修复它,只需使用Bundler启动您的应用程序。您说您正在使用$ruby config.ru
运行,但这不是使用config.ru
的正确方法(即使您解决了依赖性问题,以后也会出现错误)。您应该使用rackup
。在这种情况下,您应该运行:
$ bundle exec rackup
谢谢Matt,但是运行$bundle exec rackup并没有解决问题。我将终端输出添加到原始问题的末尾。@DuncanMalashock这是另一个问题。您似乎正在运行一个相当旧的mongoid版本(1.0.6),它没有
加载代码>方法。您需要更新到更新的版本($bundle update mongoid
,或者在您的Gemfile
中指定一个版本,然后重新运行bundle安装
),或者查找您正在使用的mongoid版本的文档并更新您的代码。谢谢,在Gemfile中的mongoid行添加了“~>3.0.0”并运行了bundler更新,问题解决了。