генератор рельсов не будет работать в моем приложении веселья - PullRequest
1 голос
/ 02 ноября 2011

Я пытаюсь интегрировать spree в новую установку приложения rails. Я следую вместе с руководством по началу работы на сайте Шпрее. Я нахожусь на этапе, который говорит мне вызвать команду создания для создания моего сайта 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, чтобы посмотреть, какие инструменты для генерации у меня есть.

вот мой гемфайл для справки:

    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 ]

2 голосов
/ 02 ноября 2011

Ваша версия 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 пытается найти best 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.Нет выше ни одной бета / RC-версии Spree, которая бы соответствовала этой конкретной зависимости, и поэтому вместо нее используется Spree 0.40.0.

В заключение кажется, что эта проблема будет распространена только для людей, которые пытаютсяиспользовать версию Rails, для которой не существует соответствующей версии Spree.Одним из способов решения этой проблемы было бы вытащить самоцвет 0,40,0, но это приводит к его собственным проблемам, так как версии до этого также имеют такую ​​же зависимость.Поэтому вы всегда должны проверять, поддерживается ли текущая версия Rails, которую вы используете, хотя бы одной версией Spree.

0 голосов
/ 23 ноября 2011

У меня была такая же проблема с рельсами 3.1.Ответ был помещен в мой GEMFILE следующей строкой.

===: git с URL репозитория, который работает === gem 'spree',: git => 'git: //github.com/spree/spree.git'

Теперь это работа моих генераторов и моего веселья.

привет.

...