প্রতিটি পরিবর্তনের পরে ফাইলটি স্বয়ংক্রিয়ভাবে পুনরায় লোড করতে সিনাত্রা কীভাবে পাবেন?


118

আমি ব্যাবহার করছি

# my_app.rb
load 'index.rb'

এবং এটি Sever শুরু করুন

ruby my_app.rb

তবে এটি সূচী পৃষ্ঠায় আমার করা কোনও পরিবর্তন পুনরায় লোড করে না।
আমি কি এখানে কিছু মিস করেছি?

উত্তর:


203

দেখুন Sinatra, প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী ,

"আমি কীভাবে পরিবর্তনগুলিতে আমার সিনেট্রা অ্যাপটিকে পুনরায় লোড করব?"

প্রথমত, রুবিতে ইন-প্রসেস কোড পুনরায় লোড করা শক্ত এবং এমন একটি সমাধান থাকা যা প্রতিটি দৃশ্যের জন্য কাজ করে প্রযুক্তিগতভাবে অসম্ভব।

যে কারণে আমরা আপনাকে প্রক্রিয়া ছাড়িয়ে পুনরায় লোড করার পরামর্শ দিই।

আপনার যদি ইতিমধ্যে না থাকে তবে প্রথমে আপনাকে পুনরায় ইনস্টল করতে হবে :

 $ gem install rerun

এখন আপনি যদি আপনার সিনাত্রা অ্যাপটি এভাবে শুরু করেন:

$ ruby app.rb

পুনরায় লোড করার জন্য আপনাকে যা করতে হবে তা হ'ল পরিবর্তে এটি করুন:

$ rerun 'ruby app.rb'

আপনি যদি উদাহরণস্বরূপ র্যাকআপ ব্যবহার করেন তবে পরিবর্তে নিম্নলিখিতটি করুন:

ra পুনরায় 'রাকআপ'

আপনি ধারণা পেতে।

আপনি যদি এখনও প্রক্রিয়া পুনরায় লোড করতে চান তবে চেক আউট করুন Sinatra::Reloader


শটগানটির জন্য একটি ন্যূনতম কনফিগার করা দরকার ru আপনার যদি ইতিমধ্যে কোনও না থাকে তবে এটি তৈরি করুন এবং এতে "প্রয়োজনীয় '।
জেফ্রি মার্টিনেজ

জন্য ছোট সংযোজন rerun। আপনি ডিফল্ট বিকল্পগুলির সাথে সীমাবদ্ধ নন rerun 'rackup'। যে কোনও পোর্টে যে কোনও সার্ভার চালানো সম্ভব। এখানে উদাহরণস্বরূপ কীভাবে rerun 'rackup -s puma -p 5678 app/sinatra/config.ru'
পুমাটি

43

রত্ন ইনস্টল করুন সিনাত্রা-রিলোডার

require 'sinatra'
require 'sinatra/reloader'

দ্রষ্টব্য : এটি কেবল সিনট্রা হ্যান্ডলারগুলি (এবং সম্ভবত কিছু সিনেট্রা সার্ভার কনফিগারেশন কমান্ড) পুনরায় লোড করবে, তবে কাস্টম ফাইল নয়, যা আপনাকে ম্যানুয়ালি পুনরায় লোড করতে হবে।

9 বছর পর UPD: দেখে মনে হচ্ছে এটি ব্যবহার অন্যান্য ফাইল পুনরায় লোড করার ইতিমধ্যে সম্ভব also_reload, dont_reloadএবং after_reload- https://github.com/sinatra/sinatra/pull/1150


আরে @ নাকিলন, আমি কীভাবে ম্যানুয়ালি এই জাতীয় ফাইলগুলি পুনরায় লোড করব? আমি require "./my-file"সাফল্য ছাড়াই করছি
ক্রিশ্চিয়ানোম

@ ক্রিশ্চিয়ানোম, requireফাইলটি পুনরায় লোড করে না, যদি এটি ইতিমধ্যে প্রয়োজন ছিল। আপনি loadপরিবর্তে।
নাকিলন

তুমি ঠিক. server.rbআমার বাইরের ফাইলটি পুনরায় লোড করার জন্য আমাকে আমার পুনঃ-সঞ্চয় করতে হবে। এটি আমার বাহ্যিক ফাইলটি একা চেক করে না, তাই sever.rbআমার বাহ্যিক ফাইলে পরিবর্তন করার সময় প্রতিবার আমার নিজের পুনঃ-সঞ্চয় করতে হবে। শটগান এই ক্ষেত্রে আরও ভাল কাজ করছে বলে মনে হচ্ছে, তবে এটি ডাটাবেস সেশনগুলি পুনরায় লোড করার জন্য মনে হচ্ছে।
ক্রিশ্চিয়ানোম

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

রত্ন ইনস্টল করুন সিনাত্রা-রিলোডার

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

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

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

আপনি পরিবেশের পরিবর্তনকে বিকাশের জন্য সেট করতে এবং শর্তাধীন মণিটি লোড করতে চাইতে পারেন।



5

আমি শটগান রত্নটি পছন্দ করি। যদি আপনি একটি মডুলার সিনেট্রা অ্যাপ্লিকেশন ব্যবহার করেন এবং একটি কনফিগার.আর ফাইল থাকে তবে এটি চালানো সহজ।

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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.