Windows7でRails3 + NetBeans + デバッガー が動かない
Rails3のコーディング環境としてNetBeansを使っております。
せっかくNetBeans使っているのでどうしてもデバッガーを動かしたくなりました。
ググってみると皆様苦労されているようでして、成功事例はいくつかあるものの、その通りやってもいつもの通りうまく行かないわけです。
色々とやってみたところ、ここでも動くようになりましたので、手順を紹介します。
以下の条件が同じ方は、私が遭遇した状況と似ていると思われるので、参考にして頂くと良いかもしれません。
- RubyのバージョンがRubyInstaller 1.9.3
- NetBeansのバージョンが7.3
- linecach19のインストールはうまくいくけど、ruby-debug-base19がインストールできない
関係あるかどうかわからないけど、事前にやっていたこと
【Rubyのインストール】
RubyInstallerバージョンが良いと下記参照サイトに書いてありましたので、1.9.3の最新版をインストールします。
※Action*3 WindowsでRuby1.9.2+Rails3+NetBeans6.9.1+Debugger
各種バージョンが違うからか、このサイトで教えて頂いた方法では上手くインストールできませんでした。
【gemのアップデート】
> gem update --system
ちなみに私の環境では、下記のようなエラーがでてこれすらはまります。
ERROR: While executing gem ... (ArgumentError) invalid byte sequence in Windows-31J
ここでもググって先人の知恵をお借りし、
> set LANG=ja_JP.UTF-8
してからアップデートできることがわかりました。
【rakeのアップデート】
> gem update rake
ちなみに、ここで先程のLANG環境変数を設定してあると、今度はこれがこけますのでご注意ください。
【railsのインストール】
> gem install rails
ruby-debug***のインストール
【Devkitのインストール】
Devkitをインストールします。
RubyInstallerのダウンロードページからDevKit-tdm-32-4.5.2-20111229-1559-sfx.exeをダウンロードし、適当な場所に解凍してください。
私は "c:\rubydevkit" というフォルダを作り、そこに解凍しました。
rubyのパスが通っているコマンドプロンプトで以下を叩いてインストール終了です。
> cd c:\rubydevkit > ruby dk.rb init > ruby dk.rb install > devkitbars.bat
【linecache19のインストール】
これが通らない場合は、何か私の環境と違う原因があると思われます。
> gem install linecache19
【ruby-debug-base19のインストール】
こいつがくせものです。
素直に
> gem install ruby-debug-base19
しても
> ruby_debug.c:29:19: error: conflicting types for 'rb_iseq_compile_with_option'
となってエラー終了します。
ぐぐると色々な方法が書いてあるのですが、私の所でうまく行ったのは、最新のgemをダウンロードしてきてローカルでインストールする方法。
どうも、gemサーバーにあるruby-debug-base19(ruby-debug-base19-0.11.25)が良くないようで、最新版(ruby-debug-base19-0.11.26)だと問題なくインストールできる模様。
というわけでここからダウンロードしてきてインストールします。
> cd 'gemをダウンロードしたフォルダ' > gem install -l ruby-debug-base19-0.11.26.gem
【ruby-debug-ide19のインストール】
ruby-debug-base19がインストールできれば、問題なくインストールできるはずです。
> gem install ruby-debug-ide19
【ちゃんとインストールできたか確認】
アプリケーションのルートで、デバッガーオプション付きでサーバーを立ち上げてみましょう。
> rails s -u
下記のようなログが出ていれば、インストール成功です。
=> Booting WEBrick => Rails 3.2.9 application starting in development on http://0.0.0.0:3000 => Call with -d to detach => Ctrl-C to shutdown server ....... => Debugger enabled [2013-03-12 16:19:49] INFO WEBrick 1.3.1
NetBeansの設定
【NetBeansのバージョンは7.1.2】
当初NetBeans 7.3で試していたのですが、なぜか"プロジェクトをデバッグ(F5)"が全然動作しません。
バージョンを7.1.2にしたところばっちり動いたので、とりあえず7.1.2で使用を開始しました。
7.3で動かす方法をご存知の方は教えて頂けますと嬉しいです。
ちなみに、NetBeansをRails対応にする方法は下記ページを参照して頂くと良いと思います。私もここを参考にインストールしました。
※ NetBeans 7.1にRuby on Railsプラグインをインストールする手順
【アプリケーションのGemfileを修正】
下記を追記します。
# To use debugger gem 'ruby-debug19'
念のため bundle install しておきます。
> bundle install
【ここでデバッガーを立ち上げる】
メニューバーの、デバッグ -> プロジェクトをデバッグ でデバッガー付きでサーバーを立ち上げます。
そうするとNetbeansの出力ウインドウに下記エラーが出るはず。
Fast Debugger (ruby-debug-ide 0.4.16, ruby-debug-base 0.11) listens on 127.0.0.1:53555 C:/Ruby193p392/lib/ruby/gems/1.9.1/gems/ruby-debug-ide-0.4.16/lib/ruby-debug-ide.rb:120:in `debug_load' C:/Ruby193p392/lib/ruby/gems/1.9.1/gems/ruby-debug-ide-0.4.16/lib/ruby-debug-ide.rb:120:in `debug_program' C:/Ruby193p392/lib/ruby/gems/1.9.1/gems/ruby-debug-ide-0.4.16/bin/rdebug-ide:87:in `<top (required)>' C:/Ruby193p392/bin/rdebug-ide:19:in `load' C:/Ruby193p392/bin/rdebug-ide:19:in `<main>' Uncaught exception: no such file to load -- script\rails
これもググると、先人が対処法を残しておいてくださっています。本当に感謝。
処方箋に従い、c:\Ruby193p392\lib\ruby\gems\1.9.1\gems\ruby-debug-ide-0.4.16\lib\ruby-debug-ide.rbを修正します。
if Debugger::PROG_SCRIPT == "script#{File::ALT_SEPARATOR || File::SEPARATOR}rails" ps = "#{Dir.pwd}/script/rails" else ps = Debugger::PROG_SCRIPT end bt = debug_load(ps, options.stop, options.load_mode)
これでデバッガを再起動すれば、ちゃんと動き始めます。
【見事立ち上がりブレークもかかる!がwatchで変数を確認するとすぐ落ちる。。。】
まだやることがあるようです。。。
せっかくブレークがかかるようになったのですが、今度はwatchで変数を確認しようとすると、下記エラーを吐いて接続が落ちてしまいます。
Fast Debugger (ruby-debug-ide 0.4.9) listens on :54749 Exception in DebugThread loop: undefined method `is_binary_data?' for "#<HelloWorld:0x85915fc>":String
Google先生にお願いしたところ、またもや対処法を授けてくださる先人のページを見つけてきてくれました。
c:/Ruby193p392/lib/ruby/gems/1.9.1/gems/ruby-debug-ide19-0.4.12/lib/ruby-debug/xml_printer.rbに下記コード追加で治るとのこと。
class String def is_binary_data? ( self.count( "^ -~", "^\r\n" ).fdiv(self.size) > 0.3 || self.index( "\x00" ) ) unless empty? end end
そして再度起動。。。
動いた、動いたよ、変数も確認できています(涙)
長かった~
ネット上に情報を残してくださったみなさま、Google先生、本当にありがとうございました。