16

जैसा कि मैं इसे समझता हूं, विकास मोड में प्रत्येक अनुरोध के साथ रेल में प्लगइन को पुनः लोड नहीं किया जाता है। जो समझ में आता है, आमतौर पर आप अपने ऐप में प्लगइन जोड़ते हैं और यह वह ऐप है जिसे आप विकसित कर रहे हैं।मैं प्रत्येक प्लगइन को पुनः लोड करने के लिए अपनी प्लगइन को कैसे मजबूर कर सकता हूं?

लेकिन यदि आप एक प्लगइन विकसित कर रहे हैं, तो आपको प्लगइन में प्रत्येक बदलाव के साथ सर्वर को पुनरारंभ करना होगा जिसमें महत्वपूर्ण ओवरहेड है।

क्या रेल के विकास के दौरान आपकी प्लगइन को फिर से लोड करने का कोई तरीका है, जिस तरह से यह आपके मॉडल और नियंत्रकों को पुनः लोड करता है?

+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

प्लगइन कोड परिवर्तन करते समय सर्वर को स्वचालित रूप से पुनरारंभ करना एक स्वीकार्य समाधान है, तो आप इसके लिए माइक क्लार्क/टॉपफंकी के rstakeout का उपयोग कर सकते हैं, या नए watchr जो ऐसा लगता है जैसे यह वही काम करता है।

आप कुछ इस तरह करना होगा:

rstakeout 'touch tmp/restart.txt' 'vendor/plugins/**/*' 
+1

गार्ड भी एक है परिवर्तनों के लिए फाइल देखने के लिए अच्छा समाधान। जब फ़ाइलें बदलती हैं तो गार्ड-यात्री प्लगइन सर्वर को पुनरारंभ करता है: 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

जो मैंने किया है, लेकिन यह सबसे अच्छा समाधान – msaspence

+0

जैसा प्रतीत नहीं होता है, आप किस तरह का समाधान चाहते हैं? –

+0

यदि कोई तरीका है जो आपको कुछ भी कॉन्फ़िगर करने के लिए नहीं कहता है और केवल काम करता है तो सबसे अच्छा समाधान नहीं है, मैं विचारों से बाहर हूं। –

3

मैं शॉटगन मणि का उपयोग करके ऐसा करता हूं।

gem install shotgun

cd /path/to/rails/app

shotgun

धीमी प्रतिक्रिया समय है, लेकिन पुन: लोड सभी रेल कोड, autoload_paths

+0

काम नहीं कर रहा है मेरे भगवान, यह आश्चर्यजनक है। धन्यवाद। –

9

मैं कुछ समय के लिए इस के साथ संघर्ष कर दिया है लिखने के लिए समय बर्बाद नहीं, भी। autoload_paths और autoload_once_paths चाल सहित समाधानों में से कोई भी काम नहीं करता है। इसके अलावा, FileUpdateChecker के साथ हैक और प्रारंभकर्ता भी मदद नहीं करते हैं (चेकर ठीक से ट्रिगर करता है, लेकिन फ़ाइलों को पुनः लोड नहीं किया जाता है)। config.reload_plugins = true के लिए समान ...

हालांकि, एक समाधान है। require_dependency 'your_file_name_here' आवेदन नियंत्रक हर अनुरोध पर पुनः लोड कर रहा है और require_dependency अपनी फ़ाइल संशोधन के लिए जाँच की है और उसके अनुसार पुनः लोड किया जा के लिए बनाता है: app/controllers/application_controller.rb में एक पंक्ति जोड़ें। यह मेरे लिए काम करता है, अपाचे 2, यात्री 3 और रेल 3.0.3।

+0

दूसरे पास पर, config.reload_plugins = true मेरे लिए काम कर रहा है। – drewrobb

+0

requ_dependency मेरे लिए काम किया। इसके अतिरिक्त, क्योंकि मेरे प्लगइन को बदले में अपनी फाइलों की आवश्यकता होती है, मुझे उन आवश्यकताओं को प्रतिरूपण की आवश्यकता होती है जिनकी आवश्यकता होती है ... –

+0

मुझे संदेह है कि reload_plugins काम नहीं करते हैं क्योंकि संभवतः मेरे पास फाइलें गलत हैं, और वे लोड नहीं होते हैं रेलों द्वारा स्वचालित रूप से, इसके बजाय मैन्युअल 'आवश्यकता' कथन की आवश्यकता होती है। http://stackoverflow.com/questions/1073076/rails-lib-modules-and –

0
https://github.com/ranmocy/guard-rails साथ

, यह सुपर आसान है:

# Gemfile.local 
gem 'guard-rails' 


$ bundle 
$ guard init rails 


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


$ bundle exec guard 
0

इंजन के लिए यह समाधान,, ऑन रेल्स 2.3 काम करता है लेकिन एक cavaet के साथ आता है, यह हर अनुरोध पर इंजन और पैरेंट ऐप में सभी फाइलें लोड करें जो प्रतिक्रिया समय धीमा कर देगा। एक ही समस्या होने

RELOAD_MYENGINE=1 rails server 
संबंधित मुद्दे

 संबंधित मुद्दे