не могу активировать mysql2 (~> 0.3.6), уже активирован mysql2-0.3.2 в Rails 3.1 - PullRequest
9 голосов
/ 26 июля 2011

Я просто пытаюсь получить базовую оболочку приложения rails, работающего под 3.1, и получаю эту странную ошибку при запуске bundle exec rake db: migrate-

Please install the mysql2 adapter: `gem install activerecord-mysql2-adapter` (can't activate mysql2 (~> 0.3.6), already activated mysql2-0.3.2. Make sure all dependencies are added to Gemfile.)

Все посты, которые я читал здесь и в других местах, говорят, что я должен использовать более новый адаптер mysql2 для rails 3.1, поэтому у меня есть -

gem 'mysql2', '0.3.2'

в моем гемфайле. Некоторые посты предложили использовать -

gem 'mysql2', '~> 0.3'

но это вызывает у меня ту же ошибку. Драгоценный камень установлен в -

/Users/mark/.rvm/gems/ruby-1.9.2-p180@rails310pre/gems/mysql2-0.3.2

Было предложено, чтобы я снова включил эту строку в моем gemfile, на этот раз, чтобы ...

gem 'mysql2', '< 0.3'

но когда я это делаю, запускаю пакетную установку, а затем снова пытаюсь запустить миграцию, я получаю -

An error has occurred, all later migrations canceled:
undefined method `rows' for nil:NilClass

Мой полный файл миграции выглядит так -

class CreatePlaces < ActiveRecord::Migration
  def change
    create_table :places do |t|
      t.string :title
      t.string :meta_description
      t.string :permalink, :limit => 60
      t.string :name, :limit => 60
      t.string :address
      t.string :state, :limit => 2
      t.string :region, :limit => 3
      t.float :latitude
      t.float :longitude
      t.text :description
      t.boolean :active, :default => true

      t.timestamps
    end
    add_index :places, [:permalink, :state, :region, :latitude, :longitude, :active], :name => 'places_index'
  end
end

И полный вывод выполнения этой миграции -

==  CreatePlaces: migrating ===================================================
-- create_table(:places)
   -> 0.0925s
-- add_index(:places, [:permalink, :state, :region, :latitude, :longitude, :active], {:name=>"places_index"})
   -> 0.1097s
==  CreatePlaces: migrated (0.2023s) ==========================================

rake aborted!
An error has occurred, all later migrations canceled:

undefined method `rows' for nil:NilClass

Более поздних миграций нет, это единственное, так как это приложение, которое я только начинаю пытаться запустить Rails 3.1 должным образом. Удаление базы данных и ее воссоздание приводит меня к тому же месту.

Я могу получить доступ к Places из консоли -

ruby-1.9.2-p180 :001 > Place
   (0.3ms)  SHOW TABLES
   (0.1ms)  SHOW TABLES
   (1.1ms)  describe `places`
 => Place(id: integer, title: string, meta_description: string, permalink: string, name: string, address: string, state: string, region: string, latitude: float, longitude: float, description: text, active: boolean, created_at: datetime, updated_at: datetime) 

Но когда я на самом деле пытаюсь найти или что-то еще в Places, я получаю следующую ошибку:

Place.find(:all)
ArgumentError: wrong number of arguments (3 for 2)
    from /Users/mark/.rvm/gems/ruby-1.9.2-p180@rails310pre/gems/mysql2-0.2.7/lib/active_record/connection_adapters/mysql2_adapter.rb:634:in `select'
    from /Users/mark/.rvm/gems/ruby-1.9.2-p180@rails310pre/gems/activerecord-3.1.0.rc5/lib/active_record/connection_adapters/abstract/database_statements.rb:9:in `select_all'
    from /Users/mark/.rvm/gems/ruby-1.9.2-p180@rails310pre/gems/activerecord-3.1.0.rc5/lib/active_record/connection_adapters/abstract/query_cache.rb:62:in `select_all'
    from /Users/mark/.rvm/gems/ruby-1.9.2-p180@rails310pre/gems/activerecord-3.1.0.rc5/lib/active_record/base.rb:470:in `find_by_sql'
    from /Users/mark/.rvm/gems/ruby-1.9.2-p180@rails310pre/gems/activerecord-3.1.0.rc5/lib/active_record/relation.rb:111:in `to_a'
    from /Users/mark/.rvm/gems/ruby-1.9.2-p180@rails310pre/gems/activerecord-3.1.0.rc5/lib/active_record/relation/finder_methods.rb:155:in `all'
    from /Users/mark/.rvm/gems/ruby-1.9.2-p180@rails310pre/gems/activerecord-3.1.0.rc5/lib/active_record/relation/finder_methods.rb:105:in `find'
    from /Users/mark/.rvm/gems/ruby-1.9.2-p180@rails310pre/gems/activerecord-3.1.0.rc5/lib/active_record/base.rb:437:in `find'
    from (irb):2
    from /Users/mark/.rvm/gems/ruby-1.9.2-p180@rails310pre/gems/railties-3.1.0.rc5/lib/rails/commands/console.rb:45:in `start'
    from /Users/mark/.rvm/gems/ruby-1.9.2-p180@rails310pre/gems/railties-3.1.0.rc5/lib/rails/commands/console.rb:8:in `start'
    from /Users/mark/.rvm/gems/ruby-1.9.2-p180@rails310pre/gems/railties-3.1.0.rc5/lib/rails/commands.rb:40:in `<top (required)>'
    from script/rails:6:in `require'
    from script/rails:6:in `<main>'

У кого-нибудь есть идеи? Я копаю уже около 18 часов и просто бегаю кругами.

Спасибо, --Mark

Ответы [ 4 ]

10 голосов
/ 16 сентября 2015

Active Record предъявляет свои собственные требования к совместимым версиям mysql2. Вот строка кода для Rails 3.1. Вы должны использовать версию mysql2, которая удовлетворяет этим требованиям.

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

Это говорит о том, что Rails ожидает версию mysql2 больше 0.3.6 и меньше 0.4.0, но найдена версия 0.3.2. Если вы измените свой Gemfile, чтобы запросить версию в этом диапазоне, тогда Active Record будет рада. Может быть,

gem 'mysql2', '0.3.6'

Не забудьте обновить пакет после изменения Gemfile.

bundle update mysql2
2 голосов
/ 02 августа 2011

Это также заставило меня выдернуть мои волосы.Единственное разумное решение, которое я мог найти, - это переключиться на главную ветку гема mysql2.

гем 'mysql2',: git => 'git: //github.com/brianmario/mysql2.git'

После этого обновления мое приложение Rails 3.1.0.rc5 может запускаться с MySQL.(На момент написания этой статьи последняя версия камня была 0.3.6)

0 голосов
/ 02 августа 2018

Я знаю, что это очень старая тема, но, поскольку она все еще встречается в Google, я считаю, что это один из первых результатов, который я обновил, и мне пришлось работать над этой проблемой в новых версиях Rails.

Ошибка показывает как:

Gem::LoadError: Specified 'mysql2' for database adapter, 
but the gem is not loaded. Add `gem 'mysql2'` to your Gemfile 

с последующим:

Gem::LoadError: can't activate mysql2 (< 0.5, >= 0.3.13), 
already activated mysql2-0.5.2. Make sure all dependencies are 
added to Gemfile.

Я уже добавил камень в свой Gemfile, как показано ниже:

group :production do
  gem 'mysql2'
end

но мне пришлось обновить его, чтобы предотвратить выбор версии за пределами диапазона, указанного в сообщении об ошибке. Обратите внимание на «<0,5» ниже: </p>

group :production do
  gem 'mysql2', '< 0.5'
end

Кроме того, разные версии Rails устанавливают разные ограничения на минимальную / максимальную версии для гема MySQL:

С https://github.com/brianmario/mysql2/issues/950#issuecomment-376375844

"Правильно, Rails 4.x не может использовать mysql2 0.5.x. Фактический код будет работают нормально, но в Rails 4 есть ограничение версии для предотвращения использование mysql2 0.5.x. Это преднамеренно, так как это позволяет будущие изменения к API, не рискуя их использованием в старом коде не готов использовать новые API. Там также нет ничего волшебного в номера версий - это совершенно случайно, что Rails 4 использует mysql2 0.4 и Rails 5 смогут использовать mysql2 0.4 или 0.5. "

0 голосов
/ 09 марта 2012

Довольно старый вопрос, поэтому я предполагаю, что оригинальный постер уже решил проблему. Однако, если кто-то придет на этот пост и попытается решить первый вопрос:

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

Скорее всего, это происходит из-за того, что вы не выполняете миграцию через bundle exec. Попробуйте запустить bundle exec rake db:migrate.

...