[#45009] Mechanize と文字コード — Takeshi Honda <moecho21@...>
お世話になります。
7 messages
2008/06/05
[#45036] WindowsでMySQL/Rubyを使おうとするとmysql.so (LoadError) — adgjmptw@...
多田と申します。
22 messages
2008/06/12
[#45038] Re: WindowsでMySQL/Rubyを使おうとするとmysql.so (LoadError)
— rubikitch@...
2008/06/12
From: adgjmptw@super-r.net
[#45040] Re: WindowsでMySQL/Rubyを使おうとするとmysql.so (LoadError)
— adgjmptw@...
2008/06/12
> (3)ロードパスに C:/usr/local/lib/ruby/site_ruby/1.8/i386-msvcrt が
[#45042] Re: WindowsでMySQL/Rubyを使おうとするとmysql.so (LoadError)
— rubikitch@...
2008/06/12
From: adgjmptw@super-r.net
[#45045] Re: WindowsでMySQL/Rubyを使おうとするとmysql.so (LoadError)
— adgjmptw@...
2008/06/13
原因と思われるものがわかりました。
[#45052] Re: WindowsでMySQL/Rubyを使おうとするとmysql.so (LoadError)
— とみたまさひろ <tommy@...>
2008/06/13
とみたです。
[#45055] Re: WindowsでMySQL/Rubyを使おうとするとmysql.so (LoadError)
— adgjmptw@...
2008/06/13
ただです。
[#45057] Re: WindowsでMySQL/Rubyを使おうとするとmysql.so (LoadError)
— "NARUSE, Yui" <naruse@...>
2008/06/14
成瀬です。
[#45064] Re: WindowsでMySQL/Rubyを使おうとするとmysql.so (LoadError)
— adgjmptw@...
2008/06/15
>mysqlclient.lib はどのディレクトリにありますか?
[#45065] uniq -c みたいなことはできないか — しん <dezawa@...>
出沢@神奈川です
6 messages
2008/06/16
[#45073] メソッドのパラメータについて — 横山(KOJIMA) <yokotatu@...>
横山と申します。
5 messages
2008/06/16
[#45087] 正規表現の書き方について — "西塔伸一郎" <omohideporoporo@...>
こんにちは。
11 messages
2008/06/19
[#45099] Ruby 1.9.0/1.8.7/1.8.6/1.8.5 new releases (Security Fix) — Urabe Shyouhei <shyouhei@...>
Hi all.
20 messages
2008/06/20
[#45100] Re: Ruby 1.9.0/1.8.7/1.8.6/1.8.5 new releases (Security Fix)
— Urabe Shyouhei <shyouhei@...>
2008/06/20
卜部です。
[#45102] Re: Ruby 1.9.0/1.8.7/1.8.6/1.8.5 new releases (Security Fix)
— 植田 裕之 <ueda@...>
2008/06/20
植田と申します。
[#45103] Re: Ruby 1.9.0/1.8.7/1.8.6/1.8.5 new releases (Security Fix)
— Urabe Shyouhei <shyouhei@...>
2008/06/20
卜部です。
[#45104] Re: Ruby 1.9.0/1.8.7/1.8.6/1.8.5 new releases (Security Fix)
— 植田 裕之 <ueda@...>
2008/06/20
植田です。
[#45105] Re: Ruby 1.9.0/1.8.7/1.8.6/1.8.5 new releases (Security Fix)
— Urabe Shyouhei <shyouhei@...>
2008/06/20
卜部です。
[#45106] Re: Ruby 1.9.0/1.8.7/1.8.6/1.8.5 new releases (Security Fix)
— akira yamada / やまだあきら <akira@...>
2008/06/21
植田 裕之 さんは書きました:
[#45107] Re: Ruby 1.9.0/1.8.7/1.8.6/1.8.5 new releases (Security Fix)
— Urabe Shyouhei <shyouhei@...>
2008/06/21
卜部です。
[#45108] Re: Ruby 1.9.0/1.8.7/1.8.6/1.8.5 new releases (Security Fix)
— akira yamada / やまだあきら <akira@...>
2008/06/21
Urabe Shyouhei さんは書きました:
[#45110] [勉強会]toRuby土曜版 — "Makoto Yonezawa" <stratosphire@...>
栃木Rubyの会のよねざわです。
1 message
2008/06/21
[#45112] ソース:インストール:MacOSX10.3.9 — 上間 健 <tntn@...>
./configure --prefix=/usr/local --with-readline-dir=/opt/local
46 messages
2008/06/22
[#45113] Re: ソース:インストール:MacOSX10.3.9
— 上間 健 <tntn@...>
2008/06/22
質問をゆるやかに変更
[#45114] Re: ソース:インストール:MacOSX10.3.9
— wei <weimayamiew@...>
2008/06/23
今晩は、ヱイと申します。
[#45122] Re: ソース:インストール:MacOSX10.3.9
— 上間 健 <tntn@...>
2008/06/24
ヱイ さん
[#45125] Re: ソース:インストール:MacOSX10.3.9
— Ryutaro Amano <wn9r-amn@...>
2008/06/24
天野です。
[#45131] Re: ソース:インストール:MacOSX10.3.9
— Hidetoshi NAGAI <nagai@...>
2008/06/24
Ruby/Tk メンテナの永井@知能.九工大です.
[#45143] Re: ソース:インストール:MacOSX10.3.9
— Ryutaro Amano <wn9r-amn@...>
2008/06/26
天野です。
[#45146] Re: ソース:インストール:MacOSX10.3.9
— Hidetoshi NAGAI <nagai@...>
2008/06/26
永井@知能.九工大です.
[#45149] Re: ソース:インストール:MacOSX10.3.9
— Ryutaro Amano <wn9r-amn@...>
2008/06/27
天野です。
[#45152] Re: ソース:インストール:MacOSX10.3.9
— Hidetoshi NAGAI <nagai@...>
2008/06/29
永井@知能.九工大です.
[#45184] Re: ソース:インストール:MacOSX10.3.9
— Ryutaro Amano <wn9r-amn@...>
2008/07/03
天野です。RES遅くなり申し訳ありません。
[#45186] Re: ソース:インストール:MacOSX10.3.9
— Hidetoshi NAGAI <nagai@...>
2008/07/04
永井@知能.九工大です.
[#45187] Ruby/GTK2 [BUG] object allocation during garbage collection phase
— Hideya YOSHIDA <hyoshida@...>
2008/07/04
はじめまして。
[#45192] Re: ソース:インストール:MacOSX10.3.9
— wei <weimayamiew@...>
2008/07/04
ヱイです。
[#45193] Re: ソース:インストール:MacOSX10.3.9
— Hidetoshi NAGAI <nagai@...>
2008/07/04
永井@知能.九工大です.
[#45196] Re: ソース:インストール:MacOSX10.3.9
— wei <weimayamiew@...>
2008/07/05
ヱイです。
[#45198] Re: ソース:インストール:MacOSX10.3.9
— Ryutaro Amano <wn9r-amn@...>
2008/07/05
天野です。
[#45207] Re: ソース:インストール:MacOSX10.3.9
— Hidetoshi NAGAI <nagai@...>
2008/07/07
永井@知能.九工大です.
[#45211] Re: ソース:インストール:MacOSX10.3.9
— wei <weimayamiew@...>
2008/07/07
ヱイです。
[#45140] ruby-1.8.6-p230でのfilename取得について — 杉原 透修 <sugihara.yukino@...>
杉原と申します
3 messages
2008/06/26
[#45157] MySQLに書き込む前にSJISのエスケープ文字を入れる処理ってどうされてますか? — adgjmptw@...
多田です。
12 messages
2008/06/29
[#45158] Re: MySQLに書き込む前にSJISのエスケープ文字を入れる処理ってどうされてますか?
— rubikitch@...
2008/06/29
From: adgjmptw@super-r.net
[#45159] Re: MySQLに書き込む前にSJISのエスケープ文字を入れる処理ってどうされてますか?
— adgjmptw@...
2008/06/29
> str.tosjis # Shift_JISに変換(入力文字コードは推測)
[#45160] Re: MySQLに書き込む前にSJISのエスケープ文字を入れる処理ってどうされてますか?
— rubikitch@...
2008/06/29
From: adgjmptw@super-r.net
[ruby-list:45080] Re: WindowsでMySQL/Rubyを使おうとするとmysql.so (LoadError)
From:
adgjmptw@...
Date:
2008-06-17 10:53:50 UTC
List:
ruby-list #45080
ただです。長々とすみません。最後なんでカンベンしてください。
題記の件、諦めちゃいました。Rubyは自分には難しすぎたみたいです。
ロリポ他、MySQL4.0xを使ってるホスティング会社のユーザーの方はたくさんいらっしゃ
ると思いますので、現象と原因と調査した履歴のまとめを残しておきます。
私は解決できませんでしたがスキルがある方が通りかかった時に少しでも参考になればと
思います。
【現象】
RubyからMySQLを使用するためrequire "mysql"を実行しようとするとApacheログに以下の
メッセージが出力される
C:/usr/local/lib/ruby/site_ruby/1.8/i386-msvcrt/mysql.so: 127:
指定されたプロシージャが見つかりません。
- C:/usr/local/lib/ruby/site_ruby/1.8/i386-msvcrt/mysql.so (LoadError)
【環境】
OS : WindowsXP Professional
Apache : 2.0.54
Ruby : ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32]
MySQL : MySQL Ver 12.16 Distrib 4.0.9-gamma, for Win95/Win98 (i32)
インタフェース:MySQL/Ruby
PATH : %SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;
C:\mysql\bin;C:\j2sdk1.4.2_05\bin;C:\WINDOWS\system32;
C:\usr\local\bin
【原因】
MySQLのバージョンとMySQL/Ruby(バイナリ)のバージョンが不一致。
【対策】
MySQL/Rubyのソースを入手し、Windows上でコンパイルを実施。
(MySQLのバージョンを考慮してバイナリファイルを作ってくれる)
ただ、このコンパイルがうまくいかない。(私の場合)
詳細は調査履歴を参照
【調査履歴】
コンパイル前に実施すべきこと
・Ruby,MySQL,コンパイラの実行ファイルとdllのパスをPATHに設定
・同じくライブラリパスをLIBに設定
・extconf.rb実行時には以下のオプションを指定する
--with-mysql-dir=c:/mysql
--with-mysql-lib=c:/mysql/lib/opt
--with-mysql-include=c:/mysql/include
--with-mysqlclientlib=c:mysql/lib/opt/mysqlclient
それでもうまくいかない。以下、ソースを追っかけてみた履歴です。
## extconf.rb ========================================
require 'mkmf' #お約束らしい。
if mc = with_config('mysql-config') then #mysql-configがある場合
mc = 'mysql_config' if mc == true
cflags = `#{mc} --cflags`.chomp
exit 1 if $? != 0
libs = `#{mc} --libs`.chomp
exit 1 if $? != 0
$CPPFLAGS += ' ' + cflags
$libs = libs + " " + $libs
else #mysql-configが無い場合(今回はこっち)
inc, lib = dir_config('mysql', '/usr/local')
libs = ['m', 'z', 'socket', 'nsl']
#
# mysqlclientにmysql_queryがあるか確認。無い場合はexit 1
# どうもここでexit1しているらしい。
#
while not find_library('mysqlclient', 'mysql_query', lib, "#{lib}/mysql") do
exit 1 if libs.empty?
have_library(libs.shift)
end
end
## extconf.rb ここまで ==================================
mysql_configというファイルは存在するが、--with-mysql-configに指定すると
「それは実行ファイルじゃないよん」と怒られるので、多分Windowsの場合は
使えないのではないかと推測。
ちなみにmysql_configの中身はCっぽいソース。
そこでelse句を見てみると、上記のコメントのとおりfind_libraryでmysql_query
が見つからず、libs.emptyに引っかかってexitしている。
というわけで、mkmfの中のfind_libraryをチェック
## find_library ========================================
def find_library(lib, func, *paths, &b)
func = "main" if !func or func.empty?
lib = with_config(lib+'lib', lib)
paths = paths.collect {|path| path.split(File::PATH_SEPARATOR)}.flatten
#
# ここからよくわかんない
#
checking_for "#{func}() in #{LIBARG%lib}" do
libpath = $LIBPATH
libs = append_library($libs, lib)
begin
#
# try_funcでmysql_queryがmysqlclientに存在するか確認しているらしい。
# ここで発見できていない様だ
#
until r = try_func(func, libs, &b) or paths.empty?
$LIBPATH = libpath | [paths.shift]
end
if r
$libs = libs
libpath = nil
end
ensure
$LIBPATH = libpath if libpath
end
r
end
end
## find_library ここまで ==================================
↓なにこの構文。
checking_for "#{func}() in #{LIBARG%lib}" do
until r = try_func(func, libs, &b) or paths.empty?
$LIBPATH = libpath | [paths.shift]
end
(略)
end
checking_forって関数じゃないの?(Rubyは関数といわない?)
よくわかんないけど、
第1引数 : "#{func}() in #{LIBARG%lib}"
第2引数 : do〜endの実行結果
と推測。
until r=try_func(func, libs, &b) or paths.empty?
の結果がpaths.emptyで終了している様なので、try_func()をチェック
## try_func ===========================================
def try_func(func, libs, headers = nil, &b)
headers = cpp_include(headers)
#
#↓何故か同じものをorしている
#
try_link(<<"SRC", libs, &b) or try_link(<<"SRC", libs, &b)
#{COMMON_HEADERS}
#{headers}
/*top*/
int main() { return 0; }
int t() { void ((*volatile p)()); p = (void ((*)()))#{func}; return 0; }
SRC
#{headers}
/*top*/
int main() { return 0; }
int t() { #{func}(); return 0; }
SRC
end
def try_var(var, headers = nil, &b)
headers = cpp_include(headers)
try_compile(<<"SRC", &b)
#{COMMON_HEADERS}
#{headers}
/*top*/
int main() { return 0; }
int t() { const volatile void *volatile p; p = (void *)&#{var}; return 0; }
SRC
end
## try_func ここまで ====================================
わけわからん。
try_link(<<"SRC", libs, &b) or try_link(<<"SRC", libs, &b)
って何だ? なぜ同じ式をorで繋ぐのだろう?
そもそもtry_link(<<"SRC", libs, &b) の<<て何だろう?
The Ruby way を読むと、「論理シフト」または「ヒアドキュメント」らしい。
どっちも違う気がする。
とりあえず下のほうに"SRC"があるのでこれはヒアドキュメントと仮定して
#{COMMON_HEADERS}〜SRCまでを全部try_linkの第1引数に渡すものと解釈。
このtry_funcの戻り値はどこで返すんだ?
よくわからないが、try_link(<<"SRC", libs, &b) or try_link(<<"SRC", libs, &b)
の結果が戻り値であると推測。
というわけで try_linkをチェック
## try_link ===========================================
def try_link(src, opt="", &b)
try_link0(src, opt, &b)
ensure
rm_f "conftest*", "c0x32*"
end
## try_link ここまで ====================================
そのまんま try_link0に受け流している。
というわけでtry_link0をチェック
## try_link0 ===========================================
def try_link0(src, opt="", &b)
try_do(src, link_command("", opt), &b)
end
## try_link0 ここまで ====================================
link_command("", opt)の結果をtry_doに渡している。
一応、link_comanndをチェック... したけど、コマンドのオプション文字列を作っている
だけなので、何も問題なさそう。
というわけでtry_doをチェック
## try_do ===========================================
def try_do(src, command, &b)
src = create_tmpsrc(src, &b)
xsystem(command)
ensure
log_src(src)
end
## try_do ここまで ====================================
さっき作ったコマンドをxsystem()に渡している。多分ここで実行しているに違いない。
ということでxsystem()をチェック
## xsystem ===========================================
def xsystem command
Logging::open do
puts command.quote
system(command)
end
end
## xsystem ここまで ====================================
受け取ったコマンドをsystem関数で実行。
ここが失敗しているからmysqlclient.libにmysql_queryが無いといわれている。
というわけで、実行しているコマンドを画面に出力させてみた。
## コマンド ===========================================
(適当に改行が入っていますが、実際には1行で出力されます)
cl -nologo -Feconftest -I. -IC:/usr/local/lib/ruby/1.8/i386-mswin32
-I. -IC:/usr/local/lib/ruby/1.8/i386-mswin32 -I/usr/local/include
-MD -Zi -O2b2xg- -G6 conftest.c
msvcrt-ruby18-static.lib c:/mysql/lib/opt/mysqlclient.lib
oldnames.lib user32.lib advapi32.lib ws2_32.lib
-link -libpath:"." -libpath:"C:/usr/local/lib"
-libpath:"c:/mysql/lib/opt" -libpath:"/usr/local/lib" -stack:0x2000000
## コマンド ここまで ====================================
mkmf.logに書かれているのと同じ結果が出力された。
conftest.cが何者かよくわからないが、とりあえずこのコマンドラインをこのまんまコマンド
プロンプトで実行したところ、
'cl' は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイ
ルとして認識されていません。
と出力される。
clはコマンドラインのコンパイラだったと思ったのでcl.exeを検索してPATHに追加。
すると今度はmspdb70.dllが無いといわれるのでこれも検索してPATHに追加。
3度目の正直で実行してみたところ、何とか実行に成功
キタ━( )━(゜ )━(∀゜ )━(゜∀゜)━( ゜∀)━( ゜)━( )━
で、実行結果を確認すると
## 実行結果 ===========================================
C:\mr>echo %errorlevel%
-1073741515
## 実行結果 ここまで ====================================
0以外が返って来ている。
この原因を調べれば、mysqlclient.libの中にmysql_queryが見つからない原因がわかるはず。
--