Exerb と RubyGems
RubyGems を使ってる Rubyスクリプトを Exerb で Windows実行形式にしても、LoadError になって起動しない。
require 'rubygems' puts 'Hello!'
Rubyで実行すれば普通に動きます。
exyファイル作成後 exerbコマンドで実行形式にし実行した場合にエラー
rubygems.rb:349:in `clear_paths': no such file to load -- rubygems/specification (LoadError) from rubygems.rb:1235
実行環境
恐らくは autoload の影響かと思われ、"C:\Program Files (x86)\ruby-1.8\lib\ruby\site_ruby\1.8\rubygems.rb" の 1235行目で Gem.clear_paths を実行し、その際 349行目で Gem::Specification.reset を実行、 1141行目で autoload 設定していた rubygems/specification をロードしようとしてエラーになるのでしょう。
一応先に require しておけば回避できますが、ちょっと ad hoc に過ぎる。
module Gem; VERSION = '1.8.5'; end require 'rubygems/specification' require 'rubygems' puts 'Hello!'
あとは rubygems.rb の autoload 設定を require に書き換えるとかかな。ちなみに VERSION の値には使ってる gem のバージョンを書くべきでしょう、今、gem のバージョンと ruby のバージョンがちょうど似かよってるところで混乱しないよう注意。
参考、ML exerb-developer 保存書庫より
Windows で RSpec の色
Windows(7 Professional SP1 64bit)を使っている、そのまま rspec -c でスペック出力を色付けしようとしても、次のような感じ
You must use ANSICON 1.31 or later (http://adoxa.110mb.com/ansicon/) to use colo ur on Windows
警告は出るがエラーにはならず、スペック出力は(コンソール配色を特にいじっていないので)黒地白文字で出てくる。
ANSICON
ANSICON ってなんだろうと言うことで、http://adoxa.110mb.com/ansicon/ を見に行く、Winndowsのコンソール用の ANSIエスケープ定義のようだ、ダウンロードして見る。
はじめどうやって動かすのか、インストールするのか混乱した。特にインストールとかいうことなく、単にコンソールで所要の ansicon.exe を実行すればいい模様。そうするとまたコンソールエコーが返ってくるので、そこで rspec -c とか rake spec とかすると色付きの出力になる。
とは言え、毎回フルパスで指定するのも大変だし、今回は 64bit環境なので \x64 方面のものを使ったが、\x86 方面と間違えないようにしないといけない(いやまあ動くみたいだけど)。
readme.txt や ansicon /? を見ると、パスを通すか或いは /iオプション(/I)でインストールとある。どちらもちょっと大仕掛けな感じで気が引ける、大体 Windows7 で AutoRun ってありなのか。
今のところ RSpec での使用しか考えていないので、Ruby環境で使えれば良い。ので Ruby のところにバッチファイルを置くことにする。C:\Program Files (x86)\ruby-1.8\bin に ansicon.bat 。今この手の場所では直接ファイルを新規作成出来ないの注意、別の場所で作っておいて持ってくる。バッチファイルの内容は一行だけ。
C:\<展開した場所>\ansi140\x64\ansicon.exe %1 %2 %3 %4 %5 %6 %7 %8 %9
%変数注意、それこそ /? とかのオプションを捕るように。
これで、ruby console 開いたら RSpec 実行前に一度 ansicon 実行すれば以後スペック出力に色が付くように。
RSpec::Core::Formatters::BaseTextFormatter
さて色が付くようになると、前にも書いたRSpec on Rails の色 - Rubyとか Illustratorとか SFとか折紙とか ように、Windowsのコンソールでの黒地に赤文字はちょっと見難い、反転とか強調とか考えよう。具体的にどうするかは前に書いたときとは考え方が変わっている。spec_helper.rb にて BaseTextFormatter の配色を直接変更する。
class RSpec::Core::Formatters::BaseTextFormatter def red(text); color(text, "\e[1;41m") end # "\e[1;31m" "\e[41m" "\e[1;41m" #def green(text); color(text, "\e[1;42m") end # "\e[1;32m" "\e[42m" "\e[1;42m" end # class RSpec::Core::Formatters::BaseTextFormatter
コメントにしてるエスケープシークエンスは夫々の色で反転とか強調色なんで適宜。greeen は green だしまあコメントアウト。yellow はどうしようかな、まだ近くにペンディング無いのでちゃんと考えてない。
前に書いたときとは colorメソッドの綴りが違っていてちょっと躓いた(前は colour だった模様)。
環境変数の部分文字列
"C:\Program Files (x86)\PuTTY\plink.exe" root@192.168.<云々> "date %date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%"
Windowsから、その時計で近在のホストの時間をあわせようとしてみた。コマンドの実行には PuTTY付属の plink を使う。それで root で入れるホストなのは問題だが、今は見逃す。
そして、Windows の環境変数 %date%, %time% には現在日時が入ってて、適宜「/」とか「:」で区切られてるのでフォーマットを変えないといけない。部分文字列を取ってくる記法が「:~m,n」これを「%」の前に入れる。
Windosで、CD(DVD)トレイを開閉する
結構悩んでしまった、
CD/DVDトレイ開閉スクリプト - IT生活向上ブログ
wmp = WIN32OLE.new 'WMPlayer.OCX' f = wmp.cdromcollection.getByDriveSpecifier('F:') f.eject f.eject
「F:」は光学ドライブのドライブレター、手元ではそうでした。
同じドライブオブジェクトに対し ejectメソッドを繰り返すとトレイが閉じます、オブジェクトを作り直してしまうと閉じなくなるの注意。そのときは二度 eject呼ぶと閉じます。
一行スクリプトで閉じるならこんな感じか
WIN32OLE.new('WMPlayer.OCX').cdromCollection.item(0).tap{|f|f.eject}.eject
そして WIN32OLE.new('WMPlayer.OCX')オブジェクトや、WIN32OLE.new('WMPlayer.OCX').cdromCollectionオブジェクトが捕まえてる間はドライブの電源を切れなかったり。
http://www.microsoft.com/japan/technet/scriptcenter/resources/qanda/apr06/hey0417.mspx
そしてトレイを開いたり閉じたりする(一行)スクリプト、もうドライブ指定しなくていいじゃん、それっぽいの最初で。
PuTTYで生成した公開鍵を使う
どこで見たんだっけな、PuTTYgen で生成したキーペアについて。公開鍵を Linux機に仕込む。
ssh-keygen -i -f id_rsa.pub >> authorized_keys
ちなみに -iオプションは
-i This option will read an unencrypted private (or public) key file in SSH2-compatible format and print an OpenSSH compatible private (or public) key to stdout. ssh-keygen also reads the RFC 4716 SSH Public Key File Format. This option allows importing keys from several commercial SSH implementations.