torutkのブログ

ソフトウェア・エンジニアのブログ

redmine 3.4.0のリリースと更新

(MySQL 5.1環境でmysql2 gemのビルドエラーが発生する問題と回避策を追記)

Redmine 3.4.0がリリースされました。3.4.0では、多数の新機能が加わっています。これらについて日本語で紹介しているRedmine.JPブログがあります。
Redmine 3.4 新機能紹介 | Redmine.JP Blog

id:torutk:20170115 の日記「Redmineのバージョンアップに追従しやすくする」で、RedmineをTARボールではなくSubversionリポジトリのリリースブランチから取得する方法を書きました。この方法で展開したRedmineを3.3から3.4に更新してみます。

Subversionのブランチを変更

/var/lib/redmine-3.3-stable にチェックアウトした作業ディレクトリを3.4のブランチに変更します。

redmine-3.3-stable$ svn sw ^/branches/3.4-stable
  :

ディレクトリ名がredmine-3.3-stableのままでは気持ち悪いので、変えておきます。また、シンボリックリンクも対応して修正します。

redmine-3.3-stable$ cd ..
lib$ mv redmine-3.3-stable redmine-3.4-stable
lib$ ln -sf redmine-3.4-stable redmine
lib$

Gemの更新

lib$ cd redmine
redmine$ bundle update
  :
redmine$

データベースのマイグレート

redmine$ bundle exec rake db:migrate RAILS_ENV=production
  :
redmine$ bundle exec rake tmp:clear RAILS_ENV=production
redmine$

CentOS 6.9, MySQL 5.1.73環境での問題と対処

bundle updateエラー

bundle updateを実行するとエラーになりました。

Installing mysql2 0.4.7 (was 0.3.21) with native extensions

Gem::Ext::BuildError: ERROR: Failed to build gem native extension.
  :
compiling client.c
client.c: In function ‘_mysql_client_options’:
client.c:906: error: ‘MYSQL_ENABLE_CLEARTEXT_PLUGIN’ undeclared (first use in this function)

mysql2-0.4.7.gemのネイティブコードをビルドする時に、"MYSQL_ENABLE_CLEARTEXT_PLUGIN"の定義が見つからないと。

このMYSQL_ENABLE_CLEARTEXT_PLUGINは、MySQL 5.6でサポートされるようです。

mysql2 gemのリポジトリにissuesが登録されていました(3日前)。
"Cannot install 0.4.7 on MySQL 5.1 (CentOS 6)"
https://github.com/brianmario/mysql2/issues/866

まさしくこれですね。これは、mysql2-0.4.7で発生した問題なので、mysql2-0.4.6をインストールするようにGemfileを修正します。

Index: Gemfile
===================================================================
--- Gemfile     (リビジョン 16753)
+++ Gemfile     (作業コピー)
@@ -62,7 +62,7 @@
     adapters.each do |adapter|
       case adapter
       when 'mysql2'
-        gem "mysql2", "~> 0.4.6", :platforms => [:mri, :mingw, :x64_mingw]
+        gem "mysql2", "0.4.6", :platforms => [:mri, :mingw, :x64_mingw]
       when /postgresql/
         gem "pg", "~> 0.18.1", :platforms => [:mri, :mingw, :x64_mingw]
       when /sqlite3/

これで、bundle updateを実行すると、エラーが回避できました。

db:migrate でエラー
LoadError: cannot load such file -- redcloth3
/var/lib/redmine-3.4-stable/vendor/bundler/ruby/2.3.0/gems/activesupport-4.2.8/lib/active_support/dependencies.rb:274:in `require'

時間切れにつき、後日調査

新たに redmine 3.4のブランチをチェックアウトしてインストールしたらこの問題は発生しませでした。