Ошибка адаптера rails sqlite

Я следую инструкциям в руководстве по настройкам rails и застрял при попытке использовать команду scaffold.

При запуске:

rails generate scaffold User name:string email:string  

Я получаю сообщение об ошибке:

C:/RailsInstaller/Ruby1.9.2/lib/ruby/gems/1.9.1/gems/activerecord-3.1.0/lib/active_record/connection_adapters/abstract/connection_specification.rb:71:in `rescue in establish_connection': Please install the sqlite3 adapter: `gem install activerecord-sqlite3-adapter` (can't activate sqlite3 (~> 1.3.4), already activated sqlite3-1.3.3-x86-mingw32. Make sure all dependencies are added to Gemfile.) (RuntimeError)

Продолжительность:

gem install activerecord-sqlite3-adapter

Я получил ошибку:

ERROR:  Could not find a valid gem 'activerecord-sqlite3-adapter' (>= 0) in any repository
ERROR:  Possible alternatives: activerecord-jdbcsqlite3-adapter, activerecord-sqlserver-adapter, activerecord-nulldb-adapter, activerecord-spatialite-adapter, activerecord-simpledb-adapter

Мой Gemfile выглядит так:

source 'http://rubygems.org'
gem 'rails', '3.1.0'  
gem 'sqlite3', '1.3.3'  
...

Я запускаюсь в ОС Windows 7 x64.

Любые идеи?

Ответы

Ответ 1

Хорошо, я нашел проблему. Я заметил, что моя установка Rails имеет как SQLite 1.3.3, так и 1.3.4. Я изменил свой Gemfile на:

gem 'sqlite3', '1.3.3'

в

gem 'sqlite3', '1.3.4'

Это решило проблему. Спасибо @holger-just за то, что указали мне на соответствующую строку в сообщении об ошибке в их ответе.

Ответ 2

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

gem install activerecord-jdbc-sqlite3-adapter

действительная команда установки:

gem install activerecord-jdbcsqlite3-adapter

Ссылка: http://kenai.com/jira/browse/ACTIVERECORD_JDBC-19

Ответ 3

Важной частью вашего сообщения об ошибке является этот фрагмент:

can't activate sqlite3 (~> 1.3.4), already activated sqlite3-1.3.3-x86-mingw32. Make sure all dependencies are added to Gemfile.

Чтобы исправить это, вы всегда должны запускать свои команды с помощью bundle exec так

bundle exec rails generate scaffold User name:string email:string 

Таким образом, вы даете поставщику полный контроль над вашим $LOAD_PATH, который, вероятно, решит эти проблемы.

Ответ 4

У меня тоже была эта ошибка, покупка моей проблемы была немного иной. проблема заключается в том, что sqlite3-ruby устарел, и его заменит sqlite3. в интернет-трансляции Майкла Хартля он все еще использовал старый sqlite3-ruby.

Я редактировал свой gemfile для использования sqlite 1.3.4 вместо sqlite3-ruby 1.3.1. re-ran bundle install и voila, проблема решена!

Ответ 5

Вместо

gem install activerecord-sqlite3-adapter

бег

gem install sqlite3

Ответ 6

Также в Rails Tutorial запущен:

  $ rake db:migrate

Появилась следующая ошибка:

Установите адаптер sqlite3: gem install activerecord-sqlite3-adapter (sqlite3 не входит в комплект поставки. это в Gemfile.).

Ран:

$ gem install activerecord-sqlite3-adapter

Got:

ОШИБКА: Не удалось найти действительный gem 'activerecord-sqlite3-adapter' ( >= 0) в любом репозитории

Изменен Gemfile в соответствии с одним из ответов выше:

gem 'sqlite3', '1.3.4'

Появилась еще одна ошибка, поэтому пришлось установить:

$ gem install sqlite3 -v '1.3.4'

Пробовал запуск $rake db: снова выполнить миграцию, но получил еще одну ошибку, на этот раз напоминающую ответ выше:

Пожалуйста, установите адаптер sqlite3: gem install activerecord-sqlite3-adapter (не может активировать sqlite3 (~ > 1.3.5), уже активирован sqlite3-1.3.4. Убедитесь, что все зависимости добавлены в Gemfile.)

Так изменил Gemfile на:

gem 'sqlite3', '1.3.5'

И получил еще одно сообщение об ошибке, чтобы убедиться, что "gem install sqlite3 -v" 1.3.5 "успешно" (wtf?!). Установил его успешно, выполнил установку пакета.

Прогоняется:

$ rake db:migrate

Ничего не произошло, поэтому попробовали:

$ bundle exec rails generate scaffold User name:string email:string

По другому предложению выше. И это наконец сработало. Учебник предупредил о трудоемком процессе установки, но я чувствовал, что мне нужно смешивать и сочетать, по меньшей мере, с 5 другими людьми. Надеюсь, это поможет следующему человеку.