Windows環境での sqlite3-ruby

sqlite3-rubyのジェムがアップデートできない。また、インストールできないという話しも聞く。

最新1.2.4に Windows用バイナリが用意されてないのが原因みたい。でまたアップデートはバージョンを指定できないぽい「gem update swlite3-ruby --version=1.2.3」はエラーになる。この辺までコマンド実行結果のメモ残していなかった。でもって、アンインストール。

C:\Documents and Settings\hs9587>gem uninstall sqlite3-ruby
Successfully uninstalled sqlite3-ruby-1.2.2-x86-mswin32

改めてインストール

C:\Documents and Settings\hs9587>gem install sqlite3-ruby --version=1.2.3
Successfully installed sqlite3-ruby-1.2.3-x86-mswin32
1 gem installed
Installing ri documentation for sqlite3-ruby-1.2.3-x86-mswin32...
Installing RDoc documentation for sqlite3-ruby-1.2.3-x86-mswin32...

できました。

Windows での RubyGems 1.3.1 と rubygems-update

前記(Rails 2.2.2 と RubyGems 1.3.1 と rubygems-update - Rubyとか Illustratorとか SFとか折紙とか)の通り RubyGems 1.3.1 を入れたのだが、Windows で何か調子が悪い。

環境

  • WindowsXP SP3 Professional
  • ActiveScriptRuby 1.8.7
  • ASR同梱RubyGemsをupdate --system
    • とはいえ 1.2系から特に何も update しなかった

さらに

  1. gem install rubygems-update
  2. update_rubygems

RubyGems 1.3.1 以降を要求する Rails 2.2.2 (の script\server) は動くようになったので、1.3.1 自体は入ったのだろうが、gemコマンドが動かない。

<ドライブ:パス>\rails>gem
ファイル名、ディレクトリ名、またはボリューム ラベルの構文が間違っています。

<ドライブ:パス>\rails>gem --version
ファイル名、ディレクトリ名、またはボリューム ラベルの構文が間違っています。

<ドライブ:パス>\rails>gem -v
ファイル名、ディレクトリ名、またはボリューム ラベルの構文が間違っています。

<ドライブ:パス>\rails>gem --help
ファイル名、ディレクトリ名、またはボリューム ラベルの構文が間違っています。

<ドライブ:パス>\rails>gem update
ファイル名、ディレクトリ名、またはボリューム ラベルの構文が間違っています。

ちょっと C:\Program Files\ruby-1.8\bin¥gem.bat を覘いてみる。

@ECHO OFF
IF NOT "%~f0" == "~f0" GOTO :WinNT
@"ruby.exe"" "C:/Program Files/ruby-1.8/bin/gem" %1 %2 %3 %4 %5 %6 %7 %8 %9
GOTO :EOF
:WinNT
@"ruby.exe"" "%~dpn0" %*

"%~dpn0" とか「バッチ パラメータ」については昔のメモ(railsコマンドのデータベース指定 - Rubyとか Illustratorとか SFとか折紙とか, xyzzyプレゼン - Rubyとか Illustratorとか SFとか折紙とか)とか参照、これで自分のドライブパファイル名(拡張子無し)になって所要の Rubyファイルになる。
というか、そんな大袈裟な話しじゃなくて、最後の行の「"ruby.exe"" 」の二重引用符が続いてるの、一つ余計だ。
削除して保存。

<云々>
:WinNT
@"ruby.exe" "%~dpn0" %*

そして実行してみる、動いた

<ドライブ:パス>\rails>gem -v
1.3.1

<ドライブ:パス>\rails>gem --version
1.3.1

<ドライブ:パス>\rails>gem update --system
Updating RubyGems
Nothing to update

Windowsでの attachment_fuプラグイン

Windows (InstantRails)環境で使ってみたんだけどどうも添付アップロードした画像の表示がうまく行かない。バックエンドはファイルシステムにしてるので、そのファイルの方を直接見ると RMagickによるサムネールファイル化とかは上手くいってるみたいなのに。
どうも、Windowsでの画像送信がうまくいってないっぽい。
基本的に画像の表示は

    send_data @photo.send(:current_data) \
      , :disposition => 'inline' \
      , :type => @photo.content_type

みたいな感じでやってる。@photoが所要のモデルオブジェクト、has_attacmentしてある奴。
これを、ファイルシステムのファイルを直接見る(File.read) ようにしてもやっぱり表示がうまくいかない。一方 send_file を使うことにしてファイル名を直接与えてやると今度はうまくいく。
send_file のソースを確認すると、mode が 'rb' になってる。なんというか Windows ではバイナリモードでの読み込みを使いましょうということのようだ。
vendor\plugins\attachment_fu\lib\technoweenie\attachment_fu\backends\file_system_backend.rb の current_data を書き換えてやると上手く画像表示するようになった。

  def current_data
    #File.file?(full_filename) ? File.read(full_filename) : nil
    if File.file?(full_filename)
      file = nil
      File.open(full_filename, 'rb'){ |f| file = f.read }
      file
    else
      nil
    end
  end

コメントアウトしてるのが元のソース、一行だった。これもう少しすっきり書けないかな、openブロック内で returnするのは乱暴?

InstantRails にて RMagick(ImageMagick)

Railsレシピブック 183の技」(レシピ156)を参考に

InstantRails環境

XPにてインストール済み。InstantRailsアプリケーションを起動して「I」釦メニューから InstantRailsの RubyConsole を開く。
適宜「gem update --system」「gem update」して置く。

いつの間に gem 1.3.0 になってる、しかも Windowsでのインストールに失敗してる。上記 InstatntRaislの Rubyコンソールでそのディレクトリ (InstantRails\ruby\lib\ruby\gems\1.8\gems\rubygems-update-1.3.0) に移動そして「ruby setup.rb」ri と rdoc の辺りで時間掛かるけど無事入る。

\rails_apps>gem --version
1.3.0

ほかの gem のアップデートでは hpricot のに失敗、extconf.rb とか stdio.h とか言ってる、コンパイルしようとしたか、それは無理だ。
hpricot は InstantRails で最初から入ってたんだっけ、そうだった。
こうなってくると InstantRailsをアップデートしながら使い続けてくのも段々限界に近づいてくかな。

Windows での RMagickのインストール

http://rubyforge.org/projects/rmagick/
http://rubyforge.org/frs/?group_id=12&release_id=26026
RMagick-2.6.0-ImageMagick-6.4.3-6-Q8.zip
をダウンロード、Windows用の ImageMagickバイナリーも同梱。

ImageMagick

zipを展開、ImageMagickインストーラ(ImageMagick-6.4.3-6-Q8-windows-dll.exe)も入ってるのでそれを実行。C:\Program Files\ImageMagick-6.4.3-Q8 に入ると。あとは特に、まあ ImageMagickObjectOLEControl はちょっと面白そうだったけど。

RMagick

上記 InstatntRaislの Rubyコンソールで RMagick-2.6.0-ImageMagick-6.4.3-6-Q8 ディレクトリに移動(cd)「gem install rmagick --local」

Successfully installed rmagick-2.6.0-x86-mswin32
1 gem installed

再起動しておく。

動作確認

動いた。上記のような InstantRailsの RubyConsole にて。

InstantRails\rails_apps>ruby -r rubygems -e 'require "RMagick"; Magick::Magick_version.display'
ImageMagick 6.4.3 2008-08-28 Q8 http://www.imagemagick.org
InstantRails\rails_apps>ruby -r rubygems -e 'require "RMagick"; Magick::Long_version.display'
This is RMagick 2.6.0 ($Date: 2008/08/31 20:00:39 $) Copyright (C) 2008 by Timot
hy P. Hunter
Built with ImageMagick 6.4.3 2008-08-28 Q8 http://www.imagemagick.org
Built for ruby 1.8.6
Web page: http://rmagick.rubyforge.org
Email: rmagick@rubyforge.org

含まれる文字列検索で .rb ファイルを

WIndows の検索には、テキストファイルの中身まで見てくれるものがあって重宝している(grep があればもっと良いのに)。でも、「.rb」ファイル(Rubyスクリプト)とかは、テキストファイルと見做されないので検索されない。
どうにかならないものかと

というわけで、レジストリの操作

  1. regedit 起動
    1. HKEY_CLASSES_ROOT\.rb
      • HKEY_CLASSES_ROOTのしたには他にも山程拡張子が登録されてる
    2. 新規キー「PersistentHandler」を追加
    3. その (既定)(データ、(値の設定なし)) を修正
    4. 値のデータを {5e941d80-bf96-11cd-b579-08002b30bfeb}
  2. regedit終了
  3. 再起動

無事検索出来るようになった

因みに WindowsXP Pro SP2 (SP3には出来てない)

sqlite3-ruby についてちょっと勘違い

ちょっと勘違いしてた、Windosw環境(XP Sp2)「gem install sqlite3-ruby」すれば SQLite3使える様になるかと思っていたが、それとは別に SQLite3本体をインストールしてないといけなかった。判ってみれば当たり前だ、何忘れてたんだろう、InstantRails だと最初から動いてるんでちゃんと考えてなかったのか。
というわけで、SQLite Download Page から最新Windowssqlite-3_5_9.zip、sqlitedll-3_5_9.zip をダウンロード、展開してでてきた sqlite3.dll、sqlite3.def、sqlite3.exe を C:\WINDOWS\system32 へコピー。コピー先はちょっと迷った、C:\WINDOWS でいいか、また Ruby のインストール場所とか。
コマンドプロンプトで、sqite3タイプイン、対話環境が起動する、.quit でそれを終える。

InstantRails/Rails2.1.0 で、db:create

その下記環境でリモートDBサーバ(PostgreSQL8.3) のDB作成、rake db:create で作れた。
前は作れなかった(WindowsPostgreSQLクライアントコマンドをいれてない)様な気がした(rake db:create と createdb.bat - Rubyとか Illustratorとか SFとか折紙とか)んだが。バージョンがあがってできるようになったのか、InstantRailsだからか。
ちゃんと database.yml のホストの設定も生きる。
何気に細かい所で改善進んでるのに感動。