raill2.2.2へ更新
railsの2.0.2でアプリケーションを作っていましたが、今回2.2.2へアップグレードしてみました。
環境はMacBookPro上のMacOSX10.5です。
gemでrailsをインストール
とりあえず、あまり考えずの「gem update rails」とインストールしてみました。
それから,アプリケーションのconfig/environments.rbのバージョン指定を変更。
RAILS_GEM_VERSION = '2.2.2' unless defined? RAILS_GEM_VERSION
この結果、やっぱりすんなり動作はせず、以下のようにいろいろと格闘する結果となってしまいました。
「cache_template_extensions=」の設定解除
mongrelを起動すると以下のエラーが出る。
/Library/Ruby/Gems/1.8/gems/rails-2.2.2/lib/initializer.rb:530:in `send': undefined method `cache_template_extensions=' for ActionView::Base:Class (NoMethodError) from /Library/Ruby/Gems/1.8/gems/rails-2.2.2/lib/initializer.rb:530:in `initialize_framework_settings' from /Library/Ruby/Gems/1.8/gems/rails-2.2.2/lib/initializer.rb:529:in `each' from /Library/Ruby/Gems/1.8/gems/rails-2.2.2/lib/initializer.rb:529:in `initialize_framework_settings' from /Library/Ruby/Gems/1.8/gems/rails-2.2.2/lib/initializer.rb:526:in `each' from /Library/Ruby/Gems/1.8/gems/rails-2.2.2/lib/initializer.rb:526:in `initialize_framework_settings' from /Library/Ruby/Gems/1.8/gems/rails-2.2.2/lib/initializer.rb:154:in `process' from /Library/Ruby/Gems/1.8/gems/rails-2.2.2/lib/initializer.rb:112:in `send' from /Library/Ruby/Gems/1.8/gems/rails-2.2.2/lib/initializer.rb:112:in `run' ... 12 levels... from /Library/Ruby/Gems/1.8/gems/mongrel-1.1.5/bin/../lib/mongrel/command.rb:212:in `run' from /Library/Ruby/Gems/1.8/gems/mongrel-1.1.5/bin/mongrel_rails:281 from /usr/bin/mongrel_rails:19:in `load' from /usr/bin/mongrel_rails:19
「config/environments/development.rb」
から「cache_template_extensions」に関する指定を削除しました。
cache_template_extensionsの機能自体が2.2.2からは削除されたということのようですね。
# config.action_view.cache_template_extensions = false
gettext.rbを無効にする。
さらに、mongrelを起動すると以下のようなエラーとなりました。
/Users/nyaago/workspace/cart/app/controllers/application.rb:7: undefined method `init_gettext' for ApplicationController:Class (NoMethodError) from /Library/Ruby/Gems/1.8/gems/activesupport-2.2.2/lib/active_support/dependencies.rb:382:in `load_without_new_constant_marking' from /Library/Ruby/Gems/1.8/gems/activesupport-2.2.2/lib/active_support/dependencies.rb:382:in `load_file' from /Library/Ruby/Gems/1.8/gems/activesupport-2.2.2/lib/active_support/dependencies.rb:521:in `new_constants_in' from /Library/Ruby/Gems/1.8/gems/activesupport-2.2.2/lib/active_support/dependencies.rb:381:in `load_file' from /Library/Ruby/Gems/1.8/gems/activesupport-2.2.2/lib/active_support/dependencies.rb:256:in `require_or_load' from /Library/Ruby/Gems/1.8/gems/activesupport-2.2.2/lib/active_support/dependencies.rb:221:in `depend_on' from /Library/Ruby/Gems/1.8/gems/activesupport-2.2.2/lib/active_support/dependencies.rb:133:in `require_dependency' from /Library/Ruby/Gems/1.8/gems/actionpack-2.2.2/lib/action_controller/dispatcher.rb:18:in `define_dispatcher_callbacks' ... 25 levels... from /Library/Ruby/Gems/1.8/gems/mongrel-1.1.5/bin/../lib/mongrel/command.rb:212:in `run' from /Library/Ruby/Gems/1.8/gems/mongrel-1.1.5/bin/mongrel_rails:281 from /usr/bin/mongrel_rails:19:in `load' from /usr/bin/mongrel_rails:19
2.1へ移行された方の記事を参照にして対応を行いました。
config/initializers/gettext.rbというファイルを追加して、以下のように記述。
require 'gettext/rails' module ActionView class Base delegate :file_exists?, :to => :finder unless respond_to?(:file_exists?) end end
config/environment.rbでの「require 'gettext/rails'」は削除。
これで、再度mongrelを起動
こんどは、以下のようなエラーとなる。
/Library/Ruby/Gems/1.8/gems/activesupport-2.2.2/lib/active_support/core_ext/module/aliasing.rb:33:in `alias_method': undefined method `render_file' for class `ActionView::Base' (NameError) from /Library/Ruby/Gems/1.8/gems/activesupport-2.2.2/lib/active_support/core_ext/module/aliasing.rb:33:in `alias_method_chain' from /Library/Ruby/Gems/1.8/gems/gettext-1.93.0/lib/gettext/rails.rb:291 from /Library/Ruby/Site/1.8/rubygems/custom_require.rb:36:in `gem_original_require' from /Library/Ruby/Site/1.8/rubygems/custom_require.rb:36:in `require' from /Library/Ruby/Gems/1.8/gems/activesupport-2.2.2/lib/active_support/dependencies.rb:153:in `require' from /Library/Ruby/Gems/1.8/gems/activesupport-2.2.2/lib/active_support/dependencies.rb:521:in `new_constants_in' from /Library/Ruby/Gems/1.8/gems/activesupport-2.2.2/lib/active_support/dependencies.rb:153:in `require' from /Users/nyaago/workspace/cart/config/initializers/gettext.rb:1 ... 22 levels... from /Library/Ruby/Gems/1.8/gems/mongrel-1.1.5/bin/../lib/mongrel/command.rb:212:in `run' from /Library/Ruby/Gems/1.8/gems/mongrel-1.1.5/bin/mongrel_rails:281 from /usr/bin/mongrel_rails:19:in `load' from /usr/bin/mongrel_rails:19
それから調べると、2.2.2ではgettextを使わなくてもi18n(国際化)が標準装備かつruby-getTextがRails2.2.2に非対応ぽいので、gettextを使わないといことで起動修正。
上で作成した「config/initializers/gettext.rb」を削除。
コントローラー中の「init_gettext」の記述を削除
mysqlドライバインストール
これで、再度mongrelを起動。
今回は起動まではするが、mysqlに接続するところで以下のようにエラーが発生。
!!! The bundled mysql.rb driver has been removed from Rails 2.2. Please install the mysql gem and try again: gem install mysql.
そこで、mysqlドライバをインストール。
まず、gemでのインストールを試みる。
sudo gem install mysql Password: Building native extensions. This could take a while... ERROR: Error installing mysql: ERROR: Failed to build gem native extension. /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby extconf.rb install mysql checking for mysql_query() in -lmysqlclient... no checking for main() in -lm... yes checking for mysql_query() in -lmysqlclient... no checking for main() in -lz... yes checking for mysql_query() in -lmysqlclient... no checking for main() in -lsocket... no checking for mysql_query() in -lmysqlclient... no checking for main() in -lnsl... no checking for mysql_query() in -lmysqlclient... no
だめだったので、手動インストールを行う。mysql_configの場所を指定してコンフィギュを実行してメイクしてみます。
$cd /Library/Ruby/Gems/1.8/gems/mysql-2.7 $sudo ruby extconf.rb --with-mysql-config=/usr/local/mysql-client/bin/mysql_config $sudo make
この結果、以下のようにリンクエラーが発生。
gcc -I. -I. -I/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/universal-darwin9.0 -I. -DHAVE_MYSQL_H -I/usr/local/include/mysql -D_P1003_1B_VISIBLE -DSIGNAL_WITH_VIO_CLOSE -DSIGNALS_DONT_BREAK_READ -DIGNORE_SIGHUP_SIGQUIT -DDONT_DECLARE_CXA_PURE_VIRTUAL -fno-common -arch ppc -arch i386 -Os -pipe -fno-common -c mysql.c cc -arch ppc -arch i386 -pipe -bundle -undefined dynamic_lookup -o mysql.bundle mysql.o -L"." -L"/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib" -L. -arch ppc -arch i386 -lruby -L/usr/local/mysql-client/lib/mysql -lmysqlclient -lz -lm -lpthread -ldl -lm ld: warning in /usr/local/mysql-client/lib/mysql/libmysqlclient.dylib, file is not of required architecture
mysqlがintelプロセッサーのみのアーキテクチャーなのにppcとintelのUniversalバイナリを生成しようとしたからでした。
で、Makefileを以下のとおりi386だけの構築をするよういじりました。
#CFLAGS = -fno-common -arch ppc -arch i386 -Os -pipe -fno-common CFLAGS = -fno-common -arch i386 -Os -pipe -fno-common ... #DLDFLAGS = -L. -arch ppc -arch i386 DLDFLAGS = -L. -arch i386 ... #LDSHARED = cc -arch ppc -arch i386 -pipe -bundle -undefined dynamic_lookup LDSHARED = cc -arch i386 -pipe -bundle -undefined dynamic_lookup
これで再度、Makeします。
$sudo make clean $sudo make $sudo make install
これでmongrelを再起動して、アプリケーションを操作してみると、
とりあえず動いているよう。。。
基本設定の更新
これもやっておこないと。。。。
$rake rails:update