web-dev-qa-db-ja.com

IRBでスクリプトをリロードするにはどうすればよいですか?

Ruby環境で使用するRailsスクリプトを書いていますが、Railsコンソールのリロードが面倒なため、irbから実行することにしました。待機時間はirbよりもはるかに短くなりましたが、変更を行うたびにirbを再起動し、スクリプトを要求する必要があることに悩まされています。 irbからスクリプトをリロードする簡単な方法はありますか?

this thread でメソッドを見つけましたが、明らかにgemファイルにのみ適用されます。私のrequireステートメントは次のようになります

 require "#{File.expand_path(__FILE__)}/../lib/query"

編集:loadではなくrequireを試しても、まだ動作しませんでした。これらのエラーを止めることはできません。

Ruby-1.9.2-p0 > load "#{File.expand_path(__FILE__)}/../lib/query.rb"
LoadError: no such file to load -- /Users/newuser/Dropbox/Sites/Rails/hacknyc/(irb)/../lib/query.rb
60
picardo

Irbでは、File.expand_path(__FILE__)}"#{path you ran irb from}/(irb)"を返すだけです。これにより、実際には存在しないパスが作成されます。幸いなことに、すべてのファイルパスは、いずれにしてもirbを実行した場所からの相対パスです。つまり、必要なものは次のとおりです。

load "lib/query.rb"

実際のファイルで__FILE__を使用したい場合は問題ありませんが、irbで有効なパスが生成されることを期待しないでください。 irbには「ファイル」がないため、有効なパスをまったく返すことができません。

また、__FILE__は、loadまたはrequireを介してirbにロードされたファイルで使用された場合、正常に機能します。それはちょっとそれが何のためであるので。

97
Alex Wayne

requireを使用する代わりに、loadを試してください。前者はソースファイルを一度だけロードし、後者は呼び出すたびにロードします。

39
vonconrad

このリンク に従って、ファイルをロードする必要があり、拡張子を忘れないでください。

このリンク番号2 で使用する手の込んだバージョンは次のとおりです。

Railsコンソールが機能しない理由をハッシュしてみてください。

3
pjammer

loadがあなたが探しているものだと思います。

1
lukad