環境対応 #661
完了
Windowsで日本語を含むパスのmikutter.rbを"ruby mikutter.rb"で起動すると落ちる。
Satoshi Okuno さんが10年以上前に追加.
10年以上前に更新.
説明
Windowsにて、mikutter.rbのmikutter_directoryの取得処理で、一定の条件を満たすとパスの文字列が化ける問題が有ります。
mikutter_directory = File.expand_path(File.dirname(FILE).force_encoding(Encoding.default_external))
RubyのFile.dirname()にバグが有り、引数の内容によって戻り値の文字列のエンコーディングが変わるのが問題の様です。
引数 -> 戻り値のエンコーディング > その結果
"mikutter.rb" -> US-ASCII > File.expant_pathがSJIS部分を"?"に置換して以降の処理でこける。
"./mikutter.rb"他、ディレクトリを含む物 -> Windows-31J(SJIS) ==> 正常動作
本件、RubyのIssueを見ると2.2.0で直るとの事です。
差し当たってポータブルな回避パッチを作りましたので、マージご検討頂きたく。
(WindowsとMacで動作確認実施。)
上記に関連して、同ファイルのENV['BUNDLE_GEMFILE']をmikutter_directoryを元に構築する様に変更しています。
併せてご確認下さい。
ファイル
最初のハンクに関して
mikutterが本来サポートしないニッチな環境でのRubyの不具合の回避のためのコードを取り込むことに関しては正直懐疑的です。
Ubuntuの不具合回避のためのコードなんかは、mikutterユーザが多いと思われるので最近でも入れているという事実はあるのですが、実はWindowsのような極端な環境ではあまりにハックが多いので、mikutterでは一度対応しようとして切り捨てた過去があります(URLオープンやに関してはWindows対応になっていると思いますが、あれは名残です)。
他の環境でも不具合は出ていないにせよ論理的に間違っており、特定の環境でだけ不具合として発現するといった問題ならマージすべきとも思うのですが、今回はおっしゃる通りRubyの不具合ということで、mikutterの間違いではないようです。
これについては例えば、mikutter Wikiで回避方法(パッチ等)を示すなど、何にせよ本筋にWindowsハックを入れずに済む方向を探っていきたいです。
2つ目のハンクに関して
これはよく分からなかったんですが、以下のような状況でmikutterを起動した時にクラッシュするということでしょうか。
$ ruby Documents/mikutter/mikutter.rb
- 関連している 環境対応 #667: Windowsで日本語を含むパスのmikutterを起動した場合、notice、logなどで例外が発生する。 を追加
精査有り難うございます。
ポリシーについて了解しました。賛成です。
他の環境と共用可能なコードならばと思ってましたが、これ以降そのニッチな環境も気にして行く必要が出る訳ですね。
それでとしぁさんの検証コストが増えて、開発スピードが落ちるのはまったく本意ではありません。
うまいことパッチを当てられないかやってみようと思います。
と言う訳で、本件引き取ります。
他の形式にエクスポート: Atom
PDF