2017-02-02 9 views
1

私は、プラグインのルートやライブラリを変更してベースクラスにパッチを当てるたびに、キャッシュがオフの開発モードでも、レールを再起動する必要があります。 。再起動せずにRailsアプリケーションをデバッグする

これは私のサーバーがどのように見えるかです:部分的に影響を受けたか、そのような変更を伴うまたはされたクラスをリロードするアプリを強制する方法のいずれかを知ってい

rails s 
=> Booting WEBrick 
=> Rails 3.2.16 application starting in development on http://0.0.0.0:3000 
=> Call with -d to detach 
=> Ctrl-C to shutdown server 
[2017-02-02 17:06:18] INFO WEBrick 1.3.1 
[2017-02-02 17:06:18] INFO ruby 2.1.8 (2015-12-16) [x86_64-darwin15.0] 
[2017-02-02 17:06:18] INFO WEBrick::HTTPServer#start: pid=12042 port=3000 

+0

Railsアプリケーションのいくつかの側面は、イニシャライザやもののように、サーバの起動時にのみ実行/解釈されます。 – MurifoX

答えて

2

おそらくRedmineプラグインのinit.rbファイルからパッチをロードします。 それはそれらを囲むように良い習慣です:

ActionDispatch::Reloader.to_prepare

このコールバックを使用して、パッチが開発モードでの各要求の前に再適用されます。あなたはまだあなたがルートを変更した場合、サーバーを再起動する必要が

require 'redmine' 
ActionDispatch::Reloader.to_prepare do 
    require_dependency 'redmine_multiprojects_issue/issue_patch' 
    require_dependency 'redmine_multiprojects_issue/issues_helper_patch' 
    require_dependency 'redmine_multiprojects_issue/issues_controller_patch' 
end 
Redmine::Plugin.register :redmine_multiprojects_issue do 
    ... 
end 

注:ここでは

は一例です。

+0

ああええ!私はこのコールバックを探していましたが、何が呼び出されたのか覚えていませんでした! – phoet

+0

しかし、このようにすれば、生産が減速し、不必要に再ロードされますか?私は開発中にそれを使うべきですか? –

+2

これはこのコールバックを使用することの美しさです。ブロックは実動モードで一度呼び出されるのは、Railsのコードの再読み込みが無効になっているからですが、毎回コードが開発モードで再ロードされるため呼び出されます。これにはいくつかのバリエーションがあります。最近私は 'Rails.configuration.to_prepare do'を使っています。 – jkraemer

1

スタートアッププロセスにはかなりの時間がかかります。その時間の大部分は、宝石の依存関係を読み込むためのものです。あなたはあまり決してリクエストごとにそれをしたい場合は、ここで説明したようにそれを行うには、いくつかの方法があります。

初期化子は、初期化時にのみ実行されているとして、それはレールがそれらを再実行しないことは意味をなさない。あなたは猿、パッチ適用に依存している場合は、ここで

Redmineのプラグインは通常、Rubyの宝石ではなく、メインのRailsアプリ内のフォルダに住んで
1

に記載されているものを回避する方法があります。

プラグインの作者がいくつかのRailsのベストプラクティスに従う限り、RailsのオートローディングはRedmineプラグインでも動作するはずです。注意を払うために基本的なものは以下のとおりです。

  • 適切な命名と名前空間 - 、彼らは宣言したクラス/モジュールに対応するモジュールやファイル名に対応するサブディレクトリを持っているlib/foo/bar/baz.rb
  • 中すなわちFoo::Bar::Baz生活は手動のものを必要としませんしかし、いつ、どこで、プラグインの作者が、プラグインのコードをこれらのルールを次の場合は、パッチが

をリロード自動中に再適用しているように、物事をパッチ

  • は注意が必要Railsの自動ロードすべてが聞かせておそらく自動ロードしてうまくリロードするでしょう。 1つの例外は、プラグインのinit.rbですが、これは通常、プラグインの開発中に頻繁に変更されません。

    実際には、多くのRedmineプラグインがこれらのルールに違反して自動読み込みを中断します。再ロードが試行されると、自動的にリロードやアプリケーションエラーが発生することがあります。その結果、運用モードで正常に動作するアプリケーションが作成されますが、開発モードで最初に正常に要求された後は失敗します。

    Railsの期待に合うプラグインコードを単純に再編成し、require文を削除するだけで、この種の問題を解決することができます。

    プラグインで宣言されたルートを変更するには、サーバーを再起動する必要がありますが、Redmineで自動的に再読み込みする方法はわかりません。

  • +0

    こんにちは、ヘッドスタートのおかげで...ここでいくつかの例を挙げてください。 その理由は、私は常にinit.rbに必要としており、また、rails * to_prepareイベントが実行されたときに適用されるパッチもあります。 – rupeshj

    +0

    'to_prepare'ブロックにパッチを適用する方法があります。問題は、手動では何も要求してはいけないということです。適切な命名と名前空間では、 'require_dependency'を使用する必要はありません。あなたがしなければならないのであれば、後者はRailsのコードの再読み込みを壊さないので常に優れています。 – jkraemer

    関連する問題