2012-06-27 2 views
15

私はちょうどRailsコンソールのハングアップを取得していて、クラス内のメソッドを迅速にテストするのに便利です。私はそれらの更新をつかむために「リロード」の理由必ずしもRailsコンソールで動作するとは限りません。

> reload! 

、その後、私は私のモデルに変更を加えることができることを知っているが、時々私は私の最新のコードをリロードするようには思えないことがわかります。 Railsはコードをどこかにキャッシュしますか?

:私は、このメソッドを実行すると、私のようなエラーを取得する可能性があります、

100: u = User.alll 

とRailsコンソールで:

本当に簡単擬似例では、私はライン100上の不正なコードを持っていることその後、

NoMethodError: undefined method `alll' for User:Class ... on line 100 

その後、リロードエラーに

100: u = User.all 

を固定し、自分のコードを変更します。

> reload! 

してから、正しいコードを持って、このクラスのメソッドを呼び出すときに、それはまだ

NoMethodError: undefined method `alll' for User:Class ... on line 100 

を言うだろう、明らかに、エラーが固定され、問題のあるラインがさえませんもはやライン100上にない。 "リロード"を強制的に/ハードリセットする方法はありますか?コマンド?

答えて

22

私の推測では、あなたが何かやっているということでしょう:あなたがエラーを取得し、あなたがそれを行って、修正インスタンス

  • User
  • コールsomeMethodのインスタンスを作成します

    1. reload!
    2. 既存のインスタンスでsomeMethodを呼び出すエラーを再度取得する

    それで、それ自体がリロードされていないインスタンスでメソッドを呼び出すことになります。そのクラスは再読み込みされましたが、インスタンスはすでにバグなどでメモリに格納されています。

    これは少なくとも私の推測です(100%はわかりません)。あなたはreload!後に新しいインスタンスを作成し、その新しいインスタンス上で、あなたのメソッドを呼び出す場合

    ポイントは、ですが、それは文句を停止する必要があります。

  • +0

    はい、これはまさに問題でした。作成したインスタンスは「リロード」しません。リロードして再インスタンス化すると、毎回大変な作業ができます。ありがとう@flambino – jbnunn

    関連する問題