1

我正在尝试将 spree 集成到全新安装的 rails 应用程序中。我正在关注spree 网站上的入门指南。我正在告诉我调用生成命令来创建我的 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 grails 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
4

2 回答 2

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 很愚蠢地>=为 0.40.0 指定了对 Rails 的依赖,所以遇到了这个问题。

Spree 0.40.0试图找到最好的Rails 版本>= 3.0.3,并且3.1.1.rc2很好地满足该标准,因此它继续进行。

那么这就引出“为什么 Spree 不使用最新版本?”的问题。如果您了解依赖关系解析,这很容易解释,许多人认为这很难理解,但实际上很容易。想想 1970 年代的计算机。

所有版本的 Spree>= 0.40.0 都没有将 Rails 指定为>= [something],主要是因为 Spree 的人在这里很聪明,认为这是一个愚蠢的想法。通过使用>=,您的意思是获取>=指定版本的所有版本,包括主要版本。而且我们都知道 Rails 2 与 Rails 3 有多么不同,因此我们应该假设 Rails 3 -> Rails 4 将同样“有趣”。

因此,只有 Spree 0.40.0 具有与您的特定 (3.1.1.rc2) Rails 版本相匹配的依赖项。上面没有与特定依赖项匹配的 Spree 的非 beta / RC 版本,因此使用 Spree 0.40.0 代替。

最后,似乎这个问题只会出现在那些试图使用没有相应 Spree 版本的 Rails 版本的人身上。解决此问题的一种方法是 yank 0.40.0 gem,但这会导致其自身的问题,因为之前的版本也具有相同的依赖关系。因此,您应该始终检查您正在使用的当前版本的 Rails 是否受至少一个 Spree 版本的支持。

于 2011-11-01T20:17:28.647 回答
0

我对 rails 3.1 有同样的问题。答案放在我的 GEMFILE 中。

===:git 带有有效的存储库 url=== gem 'spree', :git => 'git://github.com/spree/spree.git'

现在它的工作我的发电机和我的狂欢。

问候。

于 2011-11-23T13:40:21.820 回答