2009-08-07 11 views
107

मैं इसप्रत्येक परिवर्तन के बाद फ़ाइल को स्वत: पुनः लोड करने के लिए सिनात्रा कैसे प्राप्त करें?

ruby my_app.rb 

तरह

# my_app.rb 
load 'index.rb' 

उपयोग कर रहा हूँ और शुरू Sever लेकिन यह मैं सूचकांक पृष्ठ में किए गए परिवर्तनों को फिर से लोड कभी नहीं।
क्या मुझे यहां कुछ याद आया?

उत्तर

184

, Sinatra FAQ देखें

"How do I make my Sinatra app reload on changes?"

पहले, प्रक्रिया में कोड रूबी में पुन: लोड कठिन है और एक समाधान है कि हर परिदृश्य के लिए काम करता है हो रही तकनीकी रूप से असंभव है।

यही कारण है कि हम आपको प्रक्रिया के पुनः लोड करने की सलाह देते हैं।

सबसे पहले आप अगर आपने पहले नहीं किया rerun स्थापित करने की आवश्यकता:

$ gem install rerun 

अब अगर आप इस तरह अपने सिनात्रा ऐप्स प्रारंभ:

$ ruby app.rb 

सभी आप पुनः लोड के लिए क्या करना है बजाय है ऐसा करें:

$ rerun 'ruby app.rb' 

यदि आप उदाहरण के लिए रैकअप का उपयोग कर रहे हैं, तो इसके बजायकरेंनिम्नलिखित:

$ फिर से दौड़ना 'rackup'

आप अंदाजा हो।

यदि आप अभी भी प्रक्रिया में पुनः लोड करना चाहते हैं, तो Sinatra::Reloader देखें।

+0

बहुत बढ़िया! धन्यवाद: डी – jocap

+3

शॉटगन विंडोज के साथ काम नहीं करता है, हालांकि –

+0

शॉटगन को न्यूनतम config.ru की आवश्यकता होती है। यदि आपके पास पहले से कोई नहीं है, तो इसे बनाएं और "आवश्यकताएँ" ./my_app '"(जहां my_app.rb आपका रूबी ऐप है) डालें और आपको सेट किया जाएगा। –

40

मणि स्थापित सिनात्रा-reloader

require 'sinatra' 
require 'sinatra/reloader' 

नोट: यह केवल सिनात्रा संचालकों (और, शायद कुछ सिनात्रा सर्वर विन्यास आदेशों), लेकिन कस्टम नहीं फ़ाइलों को फिर से लोड होगा, आप जो मैन्युअल रूप से पुनः लोड करना होगा।

+0

अरे @ नॉकिलॉन, मैं मैन्युअल रूप से ऐसी फ़ाइलों को फिर से लोड करने के बारे में कैसे जाऊं? मैं 'आवश्यकता' कर रहा हूं ./my-file "सफलता के बिना – kristianlm

+0

@ क्रिस्टियनएलएम, 'आवश्यकता' फ़ाइल को फिर से लोड नहीं करता है, अगर यह पहले से ही आवश्यक था। इसके बजाय आप 'लोड' करते हैं। – Nakilon

+0

आप सही हैं। मुझे अपने 'server.rb' को फिर से सहेजना है, हालांकि, इसे अपनी बाहरी फ़ाइल को पुनः लोड करने के लिए। यह मेरी बाहरी फाइल को अकेले नहीं देखता है, इसलिए जब भी मैं अपनी बाहरी फाइल में बदलाव करता हूं तो मुझे अपने 'sever.rb' को फिर से सहेजना होगा। [शॉटगन] (http://rubygems.org/gems/shotgun) इस संबंध में बेहतर काम करने लगता है, लेकिन यह डेटाबेस सत्रों को फिर से लोड करना प्रतीत होता है। – kristianlm

6

मणि सिनात्रा-reloader

require 'sinatra/base' 
require "sinatra/reloader" 

class MyApp < Sinatra::Base 
    register Sinatra::Reloader 

    get '/' do 
    "Hello Testing1!" 
    end 
end 

आप विकास के लिए वातावरण चर सेट करने के लिए और सशर्त मणि लोड कर सकते हैं स्थापित करें। अधिक जानकारी के लिए

$ touch tmp/always_restart.txt 

देखें पैसेंजर documentation:

6

जब आप Passenger Standalone साथ एप्लिकेशन को चलाने के लिए, बस एक tmp/always_restart फ़ाइल बनाएँ।

+0

तुम एक सुनहरे भगवान हो! धन्यवाद। –

11

आप rerun मणि का उपयोग कर सकते हैं।

gem install rerun 
rerun 'ruby app.rb' 

या अगर आप आप गार्ड रैक इस्तेमाल कर सकते हैं

rerun 'rackup' 
1

rackup उपयोग कर रहे हैं। एक article at dblock.org से उठाया:

अपने Gemfile को यह करें:

guard 'bundler' do 
    watch('Gemfile') 
end 

guard 'rack' do 
    watch('Gemfile.lock') 
    watch(%r{^(config|app|api)/.*}) 
end 

अन्त में, चलाने के गार्ड:

group :development do 
    gem "guard" 
    gem "guard-bundler" 
    gem "guard-rack" 
end 

फिर, इस सामग्री के साथ अपनी परियोजना की जड़ में एक Guardfile बनाने , जैसे: bundle exec guard, और rackup हर बार पुनः लोड हो जाएगा।

4

Windows पर, मैं उपयोग कर रहा हूँ मेरी इस बात के लिए restart gem:

restart ruby my_app.rb 

या, rackup साथ:

restart rackup 

अधिक जानकारी के लिए here देखें, तो आप इसे उपयोगी पाते उम्मीद है।

+0

प्रलेखन कहता है कि यह विंडोज़ पर काम नहीं करता है, मैंने कोशिश की और यह सिनात्रा लोड करता है लेकिन चेन पर पुनः लोड नहीं होता है – peter

5

मुझे शॉटगन मणि पसंद है। यदि आप एक मॉड्यूलर सिनात्रा ऐप का उपयोग कर रहे हैं और एक config.ru फ़ाइल है तो इसे चलाने में आसान है।

shotgun config.ru 

here पर मणि की जांच करें। यह काफी सीधे आगे है और कोई विन्यास की आवश्यकता नहीं है।

0

आप केवल अपने टेम्पलेट्स सिनात्रा बदलते हैं तो हमेशा उन्हें rerender अगर आप विकास के लिए अपने वातावरण सेट हो जाएगा:

ruby app.rb -e development 
संबंधित मुद्दे

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