प्रत्येक परिवर्तन के बाद फाइल को ऑटो-रीलोड करने के लिए सिनात्रा कैसे प्राप्त करें?


118

मै इस्तेमाल कर रहा हूँ

# my_app.rb
load 'index.rb'

और इस तरह से शुरुआत करें

ruby my_app.rb

लेकिन यह इंडेक्स पेज में मेरे द्वारा किए गए किसी भी बदलाव को फिर से लोड नहीं करता।
क्या मुझे यहाँ कुछ याद आया?

जवाबों:


203

सिनात्रा FAQ देखें ,

"मैं अपने सिनात्रा ऐप को परिवर्तनों पर कैसे लोड करूं?"

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

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

यदि आपको पहले से नहीं है तो पहले आपको फिर से स्थापित करना होगा:

 $ gem install rerun

अब अगर आप अपना सिनात्रा ऐप इस तरह शुरू करते हैं:

$ ruby app.rb

आपको इसे पुनः लोड करने के लिए बस इतना करना है:

$ rerun 'ruby app.rb'

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

$ रेरुन 'रैकअप'

तुम्हें नया तरीका मिल गया है।

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


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

के लिए छोटा सा जोड़ rerun। आप डिफ़ॉल्ट विकल्पों के साथ ही सीमित नहीं हैं rerun 'rackup'। किसी भी पोर्ट पर किसी भी सर्वर को चलाना संभव है। यहां उदाहरण है कि पोर्ट नंबर 5678 पर प्यूमा को कैसे चलाया जाए -rerun 'rackup -s puma -p 5678 app/sinatra/config.ru'
sashaegorov

43

मणि स्थापित sinatra-reloader

require 'sinatra'
require 'sinatra/reloader'

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

9 साल बाद UPD: ऐसा लगता है कि पहले से ही अन्य फ़ाइलों को पुनः लोड करना संभव है also_reload, dont_reloadऔर after_reload- https://github.com/sinatra/sinatra/pull/1150


अरे @Nakilon, मैं मैन्युअल रूप से ऐसी फ़ाइलों को फिर से लोड करने के बारे में कैसे जाऊँगा? मैं require "./my-file"सफलता के बिना कर रहा हूँ
kristianlm

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

तुम सही हो। server.rbहालांकि, मुझे अपनी बाहरी फ़ाइल को फिर से लोड करने के लिए इसे फिर से सहेजना होगा । यह अकेले मेरी बाहरी फ़ाइल की जाँच नहीं करता है, इसलिए मुझे sever.rbअपनी बाहरी फ़ाइल में परिवर्तन करने के बाद अपना हर बार सहेजना होगा । शॉटगन इस संबंध में बेहतर काम कर रही है, लेकिन यह डेटाबेस सत्रों को फिर से लोड करने के लिए भी लगता है।
kristianlm

9
फ़ाइलों को पुनः लोड करने के लिए कौन सी फ़ाइलें निर्दिष्ट करें: configure :development do |c| require 'sinatra/reloader' c.also_reload "./lib/*.rb" c.also_reload "./controllers/*.rb" c.also_reload "./init/*.rb" end
--_भार

12

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

gem install rerun
rerun 'ruby app.rb' 

या यदि आप रैकअप का उपयोग कर रहे हैं

rerun 'rackup'

8

मणि स्थापित sinatra-reloader

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

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

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

आप विकास के लिए पर्यावरण चर सेट और सशर्त रूप से मणि लोड करना चाह सकते हैं।



5

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

shotgun config.ru

यहां मणि की जाँच करें । यह काफी सीधे आगे है और किसी कॉन्फ़िगरेशन की आवश्यकता नहीं है।


4

विंडोज पर, मैं इसके लिए अपने पुनरारंभ रत्न का उपयोग कर रहा हूं :

restart ruby my_app.rb

या, रैकअप के साथ:

restart rackup

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


प्रलेखन में कहा गया है कि यह खिड़कियों पर काम नहीं करता है, मैंने कोशिश की और यह साइनट्रा को लोड करता है लेकिन चेंग पर फिर से लोड नहीं करता है
पीटर

1

आप गार्ड-रैक का उपयोग कर सकते हैं। Dblock.org पर एक लेख से उठाया गया :

इसे अपने जेमफाइल में जोड़ें:

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

फिर, Guardfileइस सामग्री के साथ अपने प्रोजेक्ट के मूल में बनाएं :

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

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

अंत में, गार्ड चलाएं, जैसे: bundle exec guardऔर rackupहर बार फिर से लोड होगा।


0

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

ruby app.rb -e development
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.