2012-02-12 7 views
8

どのようにリクエストごとに宝石を強制的にリロードすることが可能ですか?Rails 3.2でリクエストごとに宝石をリロードするには?

私は宝石を開発し、ブラウザでページを更新するたびに宝石のコードをリロードしたいと思います。私のGemfile:

私はすべての提案をstakoverflowに記載してみました。何も助けなかった。 watchable_dirsとwatchable_filesの2つのRails設定パラメータも見つかりました。それらを使用しようとしたが、彼らはまた私のために動作しません。

+3

誰かが質問しなければなりません:*なぜですか?*あなたはどのような問題を解決しようとしていますか? –

+4

@Jordanの質問は明らかです。彼は宝石を開発しているので、彼はそれをシームレスに変更してデバッグしたいと考えています。 – apneadiving

+0

私は、初期化ファイルに 'to_prepare'文を入れて宝石を必要としているはずです。http://guides.rubyonrails.org/configuring.html#initialization-events – apneadiving

答えて

2

ActiveSupport :: Dependenciesアンロード可能メソッドを使用して、アンロード可能にするクラスをマークする必要があります。

class YourClass 
    unloadable 
end 

http://apidock.com/rails/ActiveSupport/Dependencies/Loadable/unloadablehttp://robots.thoughtbot.com/post/159805560/tips-for-writing-your-own-rails-engine

あなたにいくつかの背景を与える必要があります。あるいは、このような独自のリロードを行うことができます。

Object.send(:remove_const, 'YOUR_CLASS') if Object.const_defined?('YOUR_CLASS') 
GC.start 
load 'path/to/your_file.rb' 
+0

問題は私がモジュールをビルドし、それをActionViewに組み込むことです: 'ActionView :: Base.send:include、MyGem :: Helper'。だからクラスはありません。この場合、メソッド 'unloadable'を使うべきですか? – Vadim

+0

完璧な、これは私の問題を解決!私は 'Rails.env.developmentなら' unloadable? 'を私のモジュールに入れて、それは魅力的に機能します。ありがとうございました! –

2

私はこのことについて少し引用しましたが、最終的に試行錯誤しました。

のlib/my_gem/my_gem.rb:

require 'active_support/dependencies' 
ActiveSupport::Dependencies.autoload_paths += [File.expand_path("..", __FILE__)] 

module MyGem 
    include ActiveSupport::Dependencies 
    unloadable 
end 

だけでなく、あなたのすべてのクラスに「アンロード」を追加してください。

関連する問題