著作一覧 |
infoseekへコピーした。ASR配布サイト
WindowsでGemのバイナリ配布を行わない場合、つまり、その場でのビルドを実行しようとすると、nmakeあるいはlinkの問題で、Program Files (x86)のような空白入りディレクトリへコピーするとビルドに失敗する。
これはおもしろくないので、rbconfigなどが得るディレクトリ名をWindowsのShortPathNameを利用するように変更した。
この処理を行うスクリプトは(オンデマンドで処理することになるので)同梱してあるが、こんなの。
require 'pathname' require 'dl/win32' class Pathname unless class_variable_defined?('@@GetShortPathName') @@GetShortPathName = Win32API.new('Kernel32.dll', 'GetShortPathNameA', 'SSI', 'I') end def shortname olen = 200 begin buff = ' ' * olen len = @@GetShortPathName.call(relative? ? realpath.to_s : to_s, buff, buff.size) if olen < len olen = len end end while olen == len buff.rstrip.chomp("\0") end end if $0 == __FILE__ if ARGV.length == 0 $stderr.puts 'usage: winpath.rb pathname [more pathname ...]' exit 1 end ARGV.each do |f| p = Pathname.new(f) $stdout.puts p.shortname end end
なんとなく、Pathnameのメソッドだよなぁとか。
rbconfig.rbでは以下のように利用している。
TOPDIR = Pathname.new(File.dirname(__FILE__).chomp!("/lib/ruby/1.8/i386-mswin32")).shortname
逆に、これまでASRを利用していて、長いパス名を前提にしてプログラムを組まれていた場合は、もしかすると互換性の問題があるかも知れません(あるかな? 既知のディレクトリ名とマッチングをしたりしているとあるかも)。
ジェズイットを見習え |
インストールに失敗したのかもしれませんが、エラーが出て rails がインストールできません。<br><br>C:\Ruby\bin>gem install rails<br>C:/Ruby/lib/ruby/1.8/net/http.rb:560: [BUG] Segmentation fault<br>ruby 1.8.7 (2008-06-09 patchlevel 17) [i386-mswin32]<br><br><br>This application has requested the Runtime to terminate it in an unusual way.<br>Please contact the application's support team for more information.<br><br>何か確認すべき点があればご教授いただけませんでしょうか。
確認するとしたら、Rubyforge.org(および、そこからリダイレクトされた先)のサーバが生きているかどうかですね。<br>つまり、タイムアウトの処理でsegvしたように見えます。<br>とりあえず、rakeのようにサイズが小さいgemがインストールできるかどうか試していただけますか?
> とりあえず、rakeのようにサイズが小さいgemがインストールできるかどうか試していただけますか?<br><br>同じエラーでダメでした。activeldap も試しましたが同様です。<br>ちなみにこのエラーはコマンドを叩くとスグに表示されます。
>コマンド叩くとスグ<br>それは妙ですね。<br>利用しているOSはなんですか? もしかして16ビットWindows(9xとかMeとか)ですか?<br>あと、インストールに失敗していると思い当たる節があるのであれば、それを教えていただけますか?
すいません、昨日はすぐ寝てしまいました。<br>OS は XP sp2 です。一応、アンインストールして、<br>インストールしていたフォルダごと全削除してから<br>再インストールしましたが、ダメでした。