rails生成器在我的狂欢应用程序中不起作用。

时间:2011-11-01 20:14:04

标签: ruby-on-rails-3 generator spree

我正在尝试将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 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

2 个答案:

答案 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'

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

问候。