2011-07-07 20 views
7

私のRuby 1.9.2アプリケーションのバグ/機能が表示されています。 ビュー(ルビファイルではない)への変更は、サーバーの再起動が必要です。最初はRailsアプリでこれに遭遇しましたが、最小のSinatraアプリでも同じことをテストしました。Rails 3.1変更されていない再読み込み

私はこれが私の手順です

# testapp.rb 
require 'sinatra' 

get '/' do 
    [0,1,2].to_s #change this to [0,1].to_s 
end 

を実証するためのシンプルなアプリ含まれます:ページ

  • が開く

    • ruby testapp.rb(私のために薄いサーバを実行)
    • 負荷をファイルを編集してビューを編集する
    • ページをリロードする(変更はありません)
    • サーバー
    • を殺すが、私は過去数ヶ月のためのRails 3の上のRuby 1.8.7で開発してきたサーバー(今目に見える変化)

    を再起動します。任意のビューの変更でサーバーを再起動すると、開発が大幅に遅くなります。

    私はthis SO threadを準備しましたが、私のバージョンのRails(3.1.0 rc4)では、設定変数はすでにその回答ごとに設定されています。さらに、Sinatraを使用してエラーを再現することもできますので、そのようには見えません。

    誰でもこの問題を解明できますか?

    ルビーバージョン:ルビ1.9.2p180(2011-02-18リビジョン30909)[x86_64の-のLinux] サーバ:薄い1.2.11(またシナトラ/ WEBrickにしてこれをテストした)

    EDIT 7/13 、Clarification Sinatraの問題は別の問題です。Sinatraのソースの再読み込みは、デフォルトでは無効になっています。私は行動テストするためにこのコードを使用:views/test.haml:これで

    require 'sinatra' 
    require 'sinatra/reloader' 
    require 'haml' 
    
    set :views, 'views' 
    
    get '/' do 
    end 
    
    get '/test' do 
        haml :test 
    end 
    

    を、私はファイルを作りました。サーバーが実行されている間に変更すると、にページがリロードされたときに変更が表示されます。なぜRailsはRubyの1.9.2に3.1 ビューをリロードしない:このうち

    未解決問題を指し示すためのTiredpixelのおかげ?私はロードするルビーファイルを取得できますが、hamlやerbファイルは取得できません。私はバグが実際に修正されたかどうかを確認するためにサーバを再起動することになります。 (受け入れ答えの私のコメントからコピー)

    EDIT/SOLUTION

    問題は、我々はこれが正しい確認した後でもconfig/environments/development.rb

    config.cache_classes = false 
    

    にあったが、我々はまだ問題がありました。さらに下のファイルで、私たちは持っていた:

    config.threadsafe! 
    
    これがtrueに以下の3つのフラグを設定されているん何

    config.allow_concurrencyconfig.preload_frameworks、および(驚き!)config.cache_classesを。

    修正するには暗黙的に上書きされないようにconfig.threadsafe!config.cache_classesより上に移動します。

  • +1

    新しい3.1.0 rc4アプリを作成して[github](https://github.com/ezkl/reload_test)にプッシュしました。これには、単一のメソッドとルートを持つコントローラがあります。私は1.9.2-p180を走っています。 'thin start'を実行すると' http:// localhost:3000/'をブラウズし、' app/views/pages/index.html.erb'に変更すると、ビューが正しく読み込まれます。 –

    +1

    これを押していただきありがとうございます。どうやらconfig.threadsafe!の問題だったのですが、 'config.cache_classes'を書きました。 –

    答えて

    7

    通常、Railsは、開発環境ではすべてのリクエストで自動的にリロードされるように設定されています。しかし、これはlib/のファイルでは発生しません。

    Sinatraで説明した経験があります(自動再読み込みは0.9.2で削除されました):http://www.sinatrarb.com/faq.html#reloading;この再ロードを実行するにはShotgun gemをインストールすることができます。

    +0

    私の投稿は2つの異なる問題点を指していたと思います。私は –

    +3

    はあなたが 'config.cache_classes = false'を と ' config.action_controller.perform_caching = false'を の 'config /環境/ development.rb' を確認しました、それを更新しますか? – tiredpixel

    +2

    これは正しい道を辿っていた。私のチームの誰かがそれを手に入れました。既に 'config.cache_classes = false'(あなたが言及した他のフラグと同様)がありました。しかし、さらにファイルの中に 'config.threadsafe!'がありました。これは、 'config.allow_concurrency'、' config.preload_frameworks'、 'config.cache_classes'の3つのフラグをtrueに設定します。そこで、 'config.threadsafe!'を 'config.cache_classes'の上に移動して暗黙的にオーバーライドしないようにしました。 –

    関連する問題