পুনরায় লোড না করে। নেট ওয়েবসাইট আপডেট করুন


13

আমি ওয়েবসাইট বিকাশ ব্যবহৃত PHPএবং ASP classicযদি কিছু প্রয়োজন পরিবর্তন করা। আপনি কেবল একটি / একাধিক ফাইল পরিবর্তন করতে পারেন এবং কেউই সত্যিই লক্ষ্য করবে না। সম্ভবত যদি কেউ আপলোডের সময় পরিবর্তিত ফাইলটির জন্য অনুরোধ করে তবে এটি অর্ধেক দ্বিতীয় ব্যবধানের মতো। বেশিরভাগ ছোট সাইটের জন্য যা কোনও সমস্যা নয়।

তবে সর্বশেষতম সাইটগুলি তৈরি করা হয় C# MVCএবং আপনি যখন কোডটিতে পরিবর্তন করেন, আপনাকে নিজের ওয়েবসাইটটি পুনরায় তৈরি করতে হবে এবং পরিবর্তিত DLLফাইলগুলি আপলোড করতে হবে। তবে আপনি যখন আপনার DLLফাইলগুলি পরিবর্তন করবেন এটি আপনার ওয়েবসাইটটি পুনরায় চালু করবে এবং সমস্ত সক্রিয় পুনরায় সেট করবে sessions। এটিতে সমস্ত কিছু পুনরায় লোড করতে হবে এবং বড় সাইটের সাথে সবকিছু লোড হতে কয়েক মিনিট সময় নিতে পারে। সাইটের ব্রাউজ করা প্রত্যেকে লক্ষ্য করবে এবং আবার লগ ইন করতে হবে।

প্রধান সাইট আপডেটগুলি সাধারণ নয়, সুতরাং এটি কোনও সমস্যা নয়। তবে আমাদের প্রচারের জন্য নিয়মিত "ছোট" আপডেট রয়েছে। 'এই ফর্মটি পূরণ করুন এবং তিন মাসের নিখরচায় সদস্যতা পান' বা 'একটি চিত্র আপলোড করার জন্য প্রথম 10 টি ... একটি মূল্য পাবেন' এর মতো। আমি মনে করি আপনি ড্রিফট পাবেন কিছু প্রচার একই রকম হয় এবং সেটিংসের উপর ভিত্তি করে সঠিক তথ্য দেখায় এমন একটি মডিউল দিয়ে পরিচালনা করা যেতে পারে তবে প্রায়শই এটির জন্য কাস্টম কোডের প্রয়োজন হয়।

আমি একটি সিস্টেম যেখানে প্রতিটি প্রচার এটা নিজের চিন্তা ছিল DLLএকটি ইন্টারফেস উপর ভিত্তি করে ফাইল, এবং তারপর লোড DLLব্যবহার পরিবর্তনশীল Type.GetType, Activator.CreateInstanceএবং InvokeMember। যদিও এটি কাজ করতে পারে, আমি ভাবছি এটি যাওয়ার সঠিক উপায় কিনা।

সুতরাং আমার প্রশ্ন: আপনি .NETপুরো সাইটটি পুনরায় লোড না করে এবং সেশনটি বাদ দিয়ে ( কীভাবে রিসাইক্ল অ্যাপ্লিকেশন পুলের মতো) ফ্লাইতে কোনও সাইট আপডেট করবেন ।


আপনার অনুগ্রহপূর্বক মন্তব্যের জবাবে: আমি যে বড় ওয়েবসাইটগুলিতে কাজ করি সেগুলি কোডে ছোট পরিবর্তনগুলি হ্যান্ডেল করার জন্য একইভাবে কাজ করে: লোড-ব্যালেন্সারগুলির মাধ্যমে এবং প্রক্রিয়া সেশনের বাইরে - কারণ লাইভে মোতায়েন করা সমস্ত কোডের মধ্য দিয়ে যেতে হয় একটি পর্যালোচনা / সাইন-অফ প্রক্রিয়া এবং আমরা কেবল সার্ভারে কোড বাদ দিতে পারি না। আমার ধারণা "বৃহত্তর" এর সংজ্ঞাগুলি মেলাতে পারে না;)
ঝাফ - বেন ডুগইড

উত্তর:


11

"অ্যাপ্লিকেশন সূচনা" আইআইএস 7.5, উইন্ডোজ 2008 আর 2 (সেটআপ করা শক্ত) আইআইএস 8, উইন্ডোজ 2012 দেখুন

অ্যাপ্লিকেশন সূচনাটি কোনও অ্যাপ্লিকেশনকে (অ্যাপ্লিকেশন পুলের সাইট নয়) পুনরায় আরম্ভ করার অনুমতি দেয় এবং পুরানো ব্যবহার করতে পারে, নতুন অ্যাপ্লিকেশন শুরু করার সময় ওয়ার্মিংয়ের সময় পূর্ববর্তী অ্যাপ্লিকেশনটি চলছে। নতুন অ্যাপ্লিকেশনটি একবার কাটানোর পরে (আপনি যে URL গুলি সেট করতে পারেন তার দ্বারা নির্ধারিত) হয়ে গেলে এটি নতুন অ্যাপ্লিকেশনটি ব্যবহার শুরু করবে এবং পূর্ববর্তীটি বন্ধ করে দেবে। অ্যাপ্লিকেশন পুলের পুনরায় আরম্ভগুলি জুড়ে আপনার সেশনটি অবিচ্ছিন্নভাবে রিবুট করার অনুমতি দিতে পারে তা নিশ্চিত করার জন্য পদ্ধতির সাথে একত্রে অ্যাপ্লিকেশন ব্যবহার করা আপনার সাইটটিকে অবিচ্ছিন্নভাবে পুনরায় বুট করার অনুমতি দিতে পারে। (Haাফের মেশিন কী সম্পর্কে ভাল নোট রয়েছে))

অ্যাপ ইনিশিয়ালাইজেশন কনফিগারেশনের জন্য উপরের লিঙ্কগুলি ছাড়াও, আপনি কোনও সাইট পুনরায় আরম্ভ করার কারণ কী তা সন্ধান করতে চাইছেন - যেহেতু সাইট পুনরায় চালু করা অ্যাপ্লিকেশন ইনিশিয়েশন ব্যবহার করে না সাইটটি পুনরায় চালু করা বিজোড় হবে না।

আপনি আইআইএসটি কনফিগার করতে পারেন যাতে কোনও ডিএলএল আপডেট তত্ক্ষণাত্ কোনও সাইট পুনরায় আরম্ভ না করে এবং ওয়েবকনফাইগ-এ পরিবর্তন না করে (আপনার সাইটের সাথে প্রাসঙ্গিক হিসাবে, httpRunটাইম এবং বাহ্যিক কনফিগারেশন ফাইলগুলিতে উচ্চ পরিবর্তনজনিত মান)।

চূড়ান্ত ফলাফলটি হ'ল আপনি কোনও সাইট পুনরায় চালু না করেই ডিএলএল / কোড আপডেট করতে পারবেন, তারপরে কোনও অ্যাপ্লিকেশন পুনরায় চালু করতে বাধ্য করুন যা কোডের বিরামবিহীন পরিবর্তনের জন্য অ্যাপ্লিকেশন ব্যাকগ্রাউন্ডটি গরম করবে।

কনসার্টে এই জিনিসগুলি করা সীমাহীন পুনঃসূচনাগুলির জন্য বেশ ভাল কাজ করে।


পদক্ষেপের একটি ভাল সেট - অবশ্যই বিবেচনা করার জন্য কিছু :)
ঝাফ - বেন ডুগইড

এটি আমি যা খুঁজছিলাম তার মতো শোনাচ্ছে। এটি চেষ্টা করে যাচ্ছেন এবং সেট আপ করুন। ধন্যবাদ
হুগো ডেলসিং

@ হুগোডেলসিং আশা করি এটি আপনার পক্ষে দুর্দান্ত কাজ করে।
jeffreypriebe

আপনাকে ধন্যবাদ, এটিই আমি ব্যবহার করে শেষ করেছি এবং এটি দুর্দান্ত কাজ করে।
হুগো ডেলসিং

@ হুগোডেলসিং খুশি শুনে এটি আপনার পক্ষেও কাজ করেছে।
jeffreypriebe

5

আপনি যা চাইছেন তা পরিচালনা করার বিভিন্ন উপায় এবং আপনার প্রশ্নের কয়েকটি ভিন্ন দিক:

প্রচারের জন্য ছোট আপডেটগুলি পরিচালনা করুন

আপনি এখানে আসার পরে যা ঘটছেন তা হ'ল একটি কনটেন্ট ম্যানেজমেন্ট সিস্টেম বা অনুরূপ যা আপনাকে ফ্লাইতে থাকা সামগ্রীগুলি সম্পাদনা করার অনুমতি দেয় (মনে করুন ওয়ার্ডপ্রেস / দ্রুপাল বা একটি। নেট দর্শন N2 সিএমএস, উম্ব্রাকো, অর্চার্ড ইত্যাদি), তবে সেখানে এমন কিছু জিনিস যা আপনি চেষ্টা করতে পারেন যদি আপনি সেই পথে নামেন না।

কারণ এএসপি.এনইটি কেবল তখনই পুনরায় লোড করে যদি আপনি নির্দিষ্ট ধরণের ফাইল (ওয়েবকনফিগ (গুলি), /bin/এবং /app_code/মূলত ফোল্ডারগুলির বিষয়বস্তু) স্পর্শ করেন - এবং "অন্যান্য ফাইল পরিবর্তনের" জন্য একটি কনফিগারযোগ্য সীমা থাকে (মূলত আপনি একবারে এটি পরিবর্তন করেছেন তাই) আপনার সাইটের মধ্যে থাকা অনেকগুলি ফাইল অ্যাপ্লিকেশন পুল পুনরায় চালু হবে - NumRecompilesBeforeAppRestart) আপনি কিছু স্ট্যাটিক (যেমন .html) ফাইলগুলির জন্য আলাদা ফোল্ডারটি পরীক্ষা করে এমন কিছু করছেন যা আপনি প্রয়োজন হিসাবে টানছেন এবং প্রদর্শন করতে পারেন, বা LoadControlযে স্ট্রিংয়ের পথটি নিয়েছে সে পদ্ধতিটি ব্যবহার করতে পারেন you একটি .ascxব্যবহারকারী নিয়ন্ত্রণ এবং এটি গতিশীলভাবে লোড করে - আপনি কীভাবে কী দেখানবেন তা কীভাবে নির্ধারণ করা হবে তা স্ট্যাকওভারফ্লোয়ের পক্ষে আরও উপযুক্ত - তবে আমি একটি নামকরণ কনভেনশন ভিত্তিক সমাধানের প্রস্তাব দিই।

আপনি ম্যানেজড এক্সটেনসিবিলিটি ফ্রেমওয়ার্ক (এমইএফ - যা সংস্করণ 4 এর পরে থেকে .NET ফ্রেমওয়ার্কের পুরো অংশ হয়ে গেছে) এর মতো কিছু ব্যবহার করার ক্ষেত্রেও নজর রাখতে পারেন যা আপনাকে একটি প্লাগইন ভিত্তিক আর্কিটেকচার লিখতে এবং আপনার /bin/ডিরেক্টরিতে বাইরে কোনও ফোল্ডার নির্দিষ্ট করার জন্য নিরীক্ষণের অনুমতি দেয় নতুন .ডিএলএলস - যদিও অ্যাপটি পুনরায় চালু হওয়া সমস্যাটি এড়ানো হবে কিনা তা দেখার জন্য আমি এটি চেষ্টা করি নি, তবে কোনও সাইটে সাধারণ কার্যকারিতা যুক্ত করার জন্য আমি এটি একটি ওয়েব পরিবেশে ভাল প্রভাব ফেলতে ব্যবহার করেছি।

যদি এটি আবেদন না করে তবে কেবলমাত্র অপশন হিসাবে আমি ভাবতে পারি যে ক্লাসিক এএসপিতে যেমন করলাম "কোড-ইন-ফ্রন্ট" হিসাবে নিয়ন্ত্রণ যুক্ত করা - অর্থাত <script runat="server">একটি সংকলিত "কোড-ব্যাক" শ্রেণীর পরিবর্তে একটি ব্লক সহ নিয়ন্ত্রণ চালানোর জন্য যুক্তিযুক্ত রয়েছে - এটি নিয়ন্ত্রণের সময় ফ্লাইতে সংকলিত হওয়ার সাথে সাথে কিছু সময়ের প্রথম কার্য সম্পাদনের ক্ষতিতে একটি ডিএলএল পরিবর্তনের প্রয়োজনীয়তা সরিয়ে ফেলবে - আবার আপনার যদি এটির সাথে ভারসাম্য বজায় রাখতে হবে NumRecompilesBeforeAppRestartতবে আপনি 'খুব সামান্য পরিবর্তন করছি।

আমি আবার অ্যাপ্লিকেশন পুনরায় আরম্ভ জুড়ে সেশন চালিয়ে যেতে পারি?

এটি সম্ভবত সমাধান করা সহজতর সমস্যা এবং এতে তিনটি মূল পদক্ষেপ জড়িত:

  1. মেশিনকি (আইআইএস 7 কনফিগার করুন, তবে এখনও 8 টি ধরে রাখে) তার পরিবর্তে ধ্রুবক মান হতে পারে AutoGenerate- এর অর্থ হ'ল অ্যাপপুল যখন পুনর্ব্যবহার করে তখন এটি একই কী ব্যবহার করবে এবং তাই সেশন কুকিজ, ভিউসেট ইত্যাদি ডিক্রিপ্ট করতে সক্ষম হবে রিসাইক্ল
  2. হয় একটি রাষ্ট্রীয় সার্ভার সেটআপ করুন বা সেশন স্থিতি রাখতে একটি ডাটাবেস কনফিগার করুন
  3. আপনার ওয়েবকনফিগের সেশনস্টেট উপাদানটিতে বা ব্যবহার InProcকরতে স্যুইচ করুন ।StateServerSQLServer

এইভাবে আপনার অবিরাম সেশন থাকবে যা কোনও অ্যাপ পুনরায় চালু হতে পারে। তবে এগুলি "নিখরচায়িত" নয় - আপনার সেশনে সংরক্ষণ করা সমস্ত কিছু অবশ্যই সিরিয়ালাইজ করতে হবে এবং প্রতিটি পৃষ্ঠার লোডের জন্য এখন অতিরিক্ত নেটওয়ার্ক ট্রিপ দরকার হবে এবং সম্ভাব্যভাবে সেশন ডেটা প্রকাশ করতে হবে।

যাইহোক, আপনি যদি এমন অবস্থানে থাকেন যেখানে কোনও স্থাপনার পরে অ্যাপ্লিকেশনটি পুনরায় শুরু করতে "কয়েক মিনিট" লাগে, আপনি লোড-ভারসাম্যপূর্ণ পরিবেশে যেতে বা কমপক্ষে একটি হট-অদল-বদল স্টেজিং / লাইভ সেটআপ বিবেচনা করতে পারেন (যেমন অ্যাজুর / এডাব্লুএস / ইত্যাদি সরবরাহ করেছেন) - আপনি আপডেট করার সময় কোনও সার্ভার অফলাইনে নিতে পারেন বা নতুন কোডটি দিয়ে প্রস্তুত হয়ে যেতে পারেন এবং তারপরে এটিকে সরিয়ে নিতে পারেন - তবে আপনি ভাগ করে নেওয়ার উদ্দেশ্যে পদক্ষেপ নিয়েছেন সেশনগুলি (উপরে দেখুন) এটি আপনার ব্যবহারকারীদের কোনও প্রভাব ছাড়াই দুর্দান্ত কাজ করবে।


আপনার দীর্ঘ উত্তরের জন্য আপনাকে ধন্যবাদ। দুর্ভাগ্যক্রমে একটি CMSআমি চাই না। আমি সামগ্রী পরিবর্তন করতে চাই না, আমি কোড পরিবর্তন করতে চাই। সেশনগুলি সম্পর্কে অংশটি একটি উদাহরণ ছিল। DLLফাইলগুলি পুনরায় লোড করার সময় এটি পরিবর্তন করা এক মিনিট বা দুই মিনিটের জন্য ডাউন ডাউন হওয়ার সমস্যার সমাধান করবে না । MEFঅংশ আকর্ষণীয় ছিল, কিন্তু সিস্টেম আমি চিন্তা ছিল একটি তৃতীয় পক্ষের সমাধান। প্রয়াসের জন্য +1, তবে দুর্ভাগ্যক্রমে এটি আমার প্রশ্নের উত্তর নয়।
হুগো ডেলসিং

1
আমি এই উত্তরগুলির কয়েকটিকে সম্বোধন করার জন্য আমার উত্তর আপডেট করেছি: এমইএফ এমএস দ্বারা প্রকাশ করা হয়েছিল এবং ভি 4 এর পরে থেকে নেট ফ্রেমওয়ার্কের পুরো অংশ ছিল। আপনি আপনার নতুন নিয়ন্ত্রণের জন্য কোড-ইন-ফ্রন্ট ব্যবহার করার চেষ্টা করতে পারেন, বিকল্পভাবে একটি লোড-ব্যালেন্সড / স্টেজিং-লাইভ সেটআপ গ্রহণ করুন যা কোনও সার্ভার তৈরি করতে এবং চালনা করতে সক্ষম হবে এবং তারপরে এটিকে স্যুপ ইন করতে পারে
জাফ - বেন ডুগিউড

1
আমি অ্যাপ্লিকেশন ইনিশিয়েশন ব্যবহার করে একটি বিকল্প সমাধানের রূপরেখা দিয়েছি। সুবিধাটি হ'ল আপনার কোডিং এবং সার্ভার সেটআপটি আপনার চলমান পরিবেশকে সহজ রেখে, বিশেষ লোড-ব্যালেন্সিং বা গতিশীলভাবে লোডিং নিয়ন্ত্রণগুলি ছাড়াই "স্বাভাবিক"। অবশ্যই, একটি লোড-ব্যালেন্সিং / স্টেজিং-লাইভ সেটআপ অন্যান্য কারণে কার্যকর হতে পারে।
jeffreypriebe
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.