Ubuntu11.04でmysql2のbundle installが失敗する

Pocket

  • Ubuntu11.04
  • Rails3.0.7

Ubuntu固有の問題

$ sudo apt-get -y install libmysqlclient-dev

パッケージ見つけるの大変。

先生、今度はrake db:createが失敗します

bundle installは無事成功しました。でもrake db:createをやろうとするとエラーが発生します。

$ rake db:create
(in /home/noguchi/sandbox/rails_twr)
WARNING: This version of mysql2 (0.3.2) doesn't ship with the ActiveRecord adapter bundled anymore as it's now part of Rails 3.1
WARNING: Please use the 0.2.x releases if you plan on using it in Rails <= 3.0.x
rake aborted!
Please install the mysql2 adapter: `gem install activerecord-mysql2-adapter` (no such file to load -- active_record/connection_adapters/mysql2_adapter)
(See full trace by running task with --trace)

以下の記事を見つける。

The problem is because you are trying to install the lastet version of mysql2 wich is incompatible with rails 3.0.x version
SO, in your Gemfile change the line for mysql2 gem for this:
gem ‘mysql2’, ‘< 0.3’
then bundle command
and then when the new mysql2 gem file ( i think is 0.2.7 ) you will solve the problem
mysql – version of mysql2 (0.3.2) doesn't ship with the ActiveRecord adapter bundled anymore as it's now part of Rails 3.1 – Stack Overflow

どうやらmysql2アダプタの0.3系のバージョンはRails 3.1向けに作られたものらしい。Rails 3.0系を使う場合にはmysql2の0.2系を使ってねということらしい。

Gemfileのgem ‘mysql2’の行を以下のように変更して再度bundle installすれば解決。

gem 'mysql2', '< 0.3'

シンジ「それでも動かないよ!」

Ruby 1.8.7系を死傷している場合は以上で終了ですが、Ubuntu 11.04にRails 3.0.7をインストール後にやったことメモ – ありの日記でご指摘いただきました。
どうやらRuby 1.9.2でRake 0.9.0.beta.4を使用すると以下のような現象が出るらしいです。

$ rake db:create
rake aborted!
undefined method `task' for #

(See full trace by running task with --trace)

ruby on rails 3 – Undefined method ‘task’ using rake 0.9.0 – Stack Overflowによると2つの解決方法があるようです。

一番簡単な方法

Rakefileを以下のように変更する。

# Add your own tasks in files placed in lib/tasks ending in .rake,
# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.

require File.expand_path('../config/application', __FILE__)
require 'rake'

module ::YourAppName
  class Application
    include Rake::DSL
  end
end

module ::RakeFileUtils
  extend Rake::FileUtilsExt
end

YourAppName::Application.load_tasks

もう少ししっかりした方法

  1. gem uninstall rake -v 0.9で0.9プリベータ版のrakeをアンインストール
  2. Gemfilegem 'rake', '~> 0.8.7'という制約を書き加える
  3. bundle updateして終了

旧はてなダイアリーのエントリの加筆修正は余力があったらということで。。。

投稿者紹介

株式会社ユニキャスト
私たちは、テクノロジに魅せられた個性あふれるメンバーによって構成された茨城県日立市に本社を構えるベンチャー企業です。
”テクノロジを通して「驚き」と「感動」を創造し、人々の「夢」と「笑顔」を支えます。” の経営理念をモットーに明るい未来を描き、ワクワクする企画提案を続けて参ります。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください