我正在尝试将spree集成到rails应用程序的全新安装中。我正在关注狂欢网站上的getting started guide。我正在告诉我调用generate命令创建我的Spree站点的步骤。这样做时我得到一个错误:
C:/Ruby192/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/ext/module.rb:36:in `c
onst_missing': uninitialized constant Devise::IndifferentHash (NameError)
from C:/Ruby192/lib/ruby/gems/1.9.1/gems/spree_auth-0.40.0/lib/spree_aut
h.rb:17:in `activate'
from C:/Ruby192/lib/ruby/gems/1.9.1/gems/activesupport-3.1.1.rc2/lib/act
ive_support/callbacks.rb:413:in `_run_prepare_callbacks'
from C:/Ruby192/lib/ruby/gems/1.9.1/gems/activesupport-3.1.1.rc2/lib/act
ive_support/callbacks.rb:81:in `run_callbacks'
from C:/Ruby192/lib/ruby/gems/1.9.1/gems/actionpack-3.1.1.rc2/lib/action
_dispatch/middleware/reloader.rb:46:in `prepare!'
from C:/Ruby192/lib/ruby/gems/1.9.1/gems/railties-3.1.1.rc2/lib/rails/ap
plication/finisher.rb:41:in `block in <module:Finisher>'
from C:/Ruby192/lib/ruby/gems/1.9.1/gems/railties-3.1.1.rc2/lib/rails/in
itializable.rb:29:in `instance_exec'
from C:/Ruby192/lib/ruby/gems/1.9.1/gems/railties-3.1.1.rc2/lib/rails/in
itializable.rb:29:in `run'
from C:/Ruby192/lib/ruby/gems/1.9.1/gems/railties-3.1.1.rc2/lib/rails/in
itializable.rb:54:in `block in run_initializers'
from C:/Ruby192/lib/ruby/gems/1.9.1/gems/railties-3.1.1.rc2/lib/rails/in
itializable.rb:53:in `each'
from C:/Ruby192/lib/ruby/gems/1.9.1/gems/railties-3.1.1.rc2/lib/rails/in
itializable.rb:53:in `run_initializers'
from C:/Ruby192/lib/ruby/gems/1.9.1/gems/railties-3.1.1.rc2/lib/rails/ap
plication.rb:96:in `initialize!'
from C:/Ruby192/lib/ruby/gems/1.9.1/gems/railties-3.1.1.rc2/lib/rails/ra
iltie/configurable.rb:30:in `method_missing'
from C:/Users/Edu/workspace/my_store/config/environment.rb:5:in `<top (r
equired)>'
from C:/Ruby192/lib/ruby/gems/1.9.1/gems/railties-3.1.1.rc2/lib/rails/ap
plication.rb:83:in `require_environment!'
from C:/Ruby192/lib/ruby/gems/1.9.1/gems/railties-3.1.1.rc2/lib/rails/co
mmands.rb:22:in `<top (required)>'
from script/rails:6:in `require'
from script/rails:6:in `<main>'
如果只是运行rails g
或rails generate
来查看我可用的生成工具,我也会遇到相同的错误。
这是我的gemfile供参考:
source 'http://rubygems.org'
gem 'rails', '3.1.1.rc2'
# Bundle edge Rails instead:
# gem 'rails', :git => 'git://github.com/rails/rails.git'
gem 'sqlite3'
gem 'spree'
gem 'rake', '0.9.2.2'
# Gems used only for assets and not required
# in production environments by default.
group :assets do
gem 'sass-rails', '~> 3.1.0'
gem 'coffee-rails', '~> 3.1.0'
gem 'uglifier', '>= 1.0.3'
end
gem 'jquery-rails'
# To use ActiveModel has_secure_password
# gem 'bcrypt-ruby', '~> 3.0.0'
# Use unicorn as the web server
# gem 'unicorn'
# Deploy with Capistrano
# gem 'capistrano'
# To use debugger
# gem 'ruby-debug19', :require => 'ruby-debug'
group :test do
# Pretty printed test output
gem 'turn', :require => false
end
答案 0 :(得分:2)
您的spree
版本(由于某种原因)设置为0.40.0
。我建议将其升级到0.70.1
,您可以将此行添加到Gemfile
:
gem 'spree', '~> 0.70.1'
修改强>
你提到你使用的是Rails 3.1.1.rc2,这是我应该在问题的堆栈跟踪中注意到的。
糟糕。
无论如何,当不为Spree指定版本时,Bundler将尽力解决所有依赖关系。部分原因是因为你使用的是Rails 3.1.1.rc2,部分是因为Spree足够愚蠢地为Rails指定>=
依赖关系0.40.0,这就遇到了这个问题。
Spree 0.40.0尝试找到最好的 Rails版本>= 3.0.3
,而3.1.1.rc2
很好地满足了这个标准,所以它继续。
那么 引出了“为什么Spree不使用最新版本?”的问题。如果您了解依赖性解析,这很容易解释,许多人认为很难理解,但实际上很容易。在20世纪70年代思考计算机。
所有版本的Spree >= 0.40.0
都没有将Rails指定为>= [something]
,这主要是因为Spree的人在这里明智,并认为这是一个愚蠢的想法。通过使用>=
,您的意思是获得指定版本>=
的所有gem版本,其中包括主要版本。我们都知道Rails 2与Rails 3的不同之处,因此我们应该假设Rails 3 - &gt; Rails 4将同样“有趣”。
所以只有Spree 0.40.0具有与您的特定(3.1.1.rc2)Rails版本相匹配的依赖性。 Spree上面没有非beta / RC版本的特定依赖项,因此使用Spree 0.40.0。
最后,似乎这个问题只适用于那些试图使用Rails版本但没有相应版本的Spree的人。解决这个问题的一种方法是抽取0.40.0 gem,但这导致了它自己的问题,因为之前的版本也具有相同的依赖性。因此,您应该始终检查至少一个Spree版本是否支持您正在使用的当前版本的Rails。
答案 1 :(得分:0)
我在使用rails 3.1时遇到了同样的问题。答案在我的GEMFILE中放入了以下一行。
===:git与存储库的url工作=== gem'spree',:git =&gt; 'git的://github.com/spree/spree.git'
现在它是我的发电机和我的狂欢。
问候。