16

私が理解しているように、開発モードではリクエストごとにプラグインはRailsに再ロードされません。 これは意味があります。通常、プラグインをアプリケーションに追加すると、開発中のアプリケーションになります。各リクエストでプラグインをリロードするにはどうすればよいですか?

しかし、プラグインを開発している場合は、かなりのオーバーヘッドがあるプラグインを変更するたびにサーバーを再起動する必要があります。

Railsが開発中にプラグインをリロードする方法はありますか?モデルとコントローラをリロードする方法はありますか?

+0

# lib/my_engine/engine.rb if ENV['RELOAD_MYENGINE'] && Rails.env.development? config.to_prepare do Rails.logger.debug "RELOADING MY ENGINE" require_dependency MyEngine::Engine.root.join('lib', 'my_engine').to_s end config.after_initialize do Rails.application.config.reload_classes_only_on_change = false end 

は、次にサーバーを起動します。現在の回答は私には受け入れられないか、またはうまくいきません。 – drewrobb

答えて

1

プラグインコードが変更されたときに自動的にサーバーを再起動すると、Mike Clark/topfunkyのrstakeoutを使用することができます。また、新しいものはwatchrと同じです。

あなたはこのようなものだろう:、エンジンのために、

# Gemfile.local 
gem 'guard-rails' 


$ bundle 
$ guard init rails 


# Guardfile: 
guard 'rails' do 
    watch('Gemfile.lock') 
    watch(%r{^(config|plugins)/.*}) 
end 


$ bundle exec guard 
+1

ガードもファイルの変更を監視するのに適しています。 guard-passengerプラグインは、ファイルが変更されたときにサーバーを再起動します:https://github.com/mordaroso/guard-passenger – Kris

1

簡単な方法、"アプリ"フォルダ内のフォルダにプラグインを開発:

  • アプリ
    • モデル
    • コントローラ
    • ヘルパー
    • ビュー
    • your_plugin_here

この方法で、すべてのプラグインクラスは、リクエストごとに再ロードされます。

もう一つの可能​​性は、あなたのapplication.rbファイルのパスを追加することです:

require File.expand_path('../boot', __FILE__) 
require 'rails/all' 
Bundler.require(:default, Rails.env) if defined?(Bundler) 

module SunspotTutorial 
    class Application < Rails::Application 

    config.autoload_paths += %W{ #{config.root}/plugins/your_plugin_name/lib } 

    #lots of other code 
    end 
end 

あなたのプラグインはすべての時間を再ロードされようとしているこの方法です。

+0

thats私が頼りにしたことは最高の解決策のようには見えません – msaspence

+0

あなたはどんなソリューションをしたいですか? –

+0

あなたが何かを構成し、ちょうど動作するように頼んでいない方法が、最善の解決策ではないなら、私はアイデアがありません。 –

3

私はショットガンの宝石を使用してこれを行います。

gem install shotgun

cd /path/to/rails/app

shotgun

遅くなり、応答時間が、私はいくつかの時間のためにこれで苦労してきた

+0

私のおかげで、これは素晴らしいです。ありがとうございました。 –

9

autoload_paths書く時間を無駄にしない、すべてのレールコードをリロード、あまりにも。 autoload_pathsautoload_once_pathsのトリックを含む、いずれのソリューションも機能しません。さらに、FileUpdateCheckerのハックとイニシャライザも役立ちません(チェッカーが正常に起動しますが、ファイルは再ロードされません)。 config.reload_plugins = trueと同じです。

ただし、解決策があります。 app/controllers/application_controller.rb 1行追加: require_dependency 'your_file_name_here' アプリケーションコントローラは、すべての要求にがリロードされ、require_dependencyがファイルの変更を確認し、それに応じてリロードされます。それは私のために、Apache 2、Passenger 3、Rails 3.0.3で動作しました。

+0

2回目のパスでconfig.reload_plugins = trueが動作しています。 – drewrobb

+0

require_dependencyが私のために働いた。さらに、自分のプラグインが自分のファイルを順番に必要とするため、require_dependencyとそれらのrequire文を置き換えなければならなかった... –

+0

おそらくファイルが正しく設定されていないため、reload_pluginsが動作しなかったと思われます。代わりに手作業の 'require'ステートメントを必要とします。 http://stackoverflow.com/questions/1073076/rails-lib-modules-and –

0

を、それは超簡単ですリクエストごとにエンジンと親アプリ内のすべてのファイルを読み込み、応答時間を遅くします。同じ問題を抱えて

RELOAD_MYENGINE=1 rails server 
0

このソリューションには、なりますRailsの2.3上で動作しますが、1つのcavaetが付属しています:https://github.com/ranmocy/guard-rails

rstakeout 'touch tmp/restart.txt' 'vendor/plugins/**/*' 
関連する問題