Magento2 - সেটআপ: di: সংকলন


12

আমি কিছু কাস্টম কোড সহ একটি প্রকল্পে কাজ করছি ... এটি আমাদের প্রথম "মিডিয়াম" ম্যাজেন্টো 2 প্রকল্প, তাই (এখানকার সমস্ত লোকেরা আমি মনে করি) প্রতিদিন আমরা নতুন জিনিস শিখি, এবং আমাদের ডিল করার উপায়টি পরিবর্তন করতে হবে এই নতুন Magento সংস্করণ সহ

এই প্রশ্নের কারণ কমান্ড সম্পর্কে জিজ্ঞাসা করছে setup:di:compile

আমি "ম্যাজেন্টো 2" এর সাথে প্রথম দিন থেকেই এটি ব্যবহার করে আসছি, যেমন বিন / ম্যাজেন্টো প্রতিটি পরে এটি জিজ্ঞাসা করে setup:upgrade, "দয়া করে ম্যাজেন্টো কম্পাইল কমান্ডটি আবার চালান"

ভাল ... আমি setup:di:compileসম্পূর্ণ অস্পষ্ট মারাত্মক ত্রুটির সাথে এই প্রকল্পে বিরতি পণ্য দেখুন পৃষ্ঠাটি পেয়েছি । আমি পুরো কাজের দিনগুলি এটির ডিবাগ করার চেষ্টা করে এবং শূন্য ফলাফলের সাথে কোড পরিবর্তনগুলি পরীক্ষা করে কাটিয়েছি

আজ, আমি আবিষ্কার করেছি যে আমি যদি এই আদেশটি বাদ দিই তবে সমস্ত মোহন যেমন এমনকি উত্পাদন মোডেও কাজ করে

সুতরাং, প্রশ্নটি ... ঠিক সেই setup:di:compileআদেশটি কী করে ? এটা কি প্রয়োজন? শুধু প্রস্তাবিত? অথবা এটি কিছু অবহেলিত কমান্ড, যা কার্যকর করার প্রয়োজন হয় না?

হালনাগাদ

কিছু ব্যবহারকারীর যেমন প্রয়োজন হয়েছে, এটি হ'ল মারাত্মক ত্রুটি

পিএইচপি মারাত্মক ত্রুটি: ম্যাগেন্টো class ক্যাটালগ \ ব্লক \ পণ্য \ দেখুন * অ্যাবস্ট্রাক ভিউ *** / বিক্রেতার / ম্যাজেন্টো / ফ্রেমওয়ার্ক / অবজেক্টম্যানেজার / ফ্যাক্টরী / অ্যাবস্ট্র্যাক্ট ফ্যাক্টরি.এফপি 93 লাইনে

আমি ম্যাজেন্টো \ ক্যাটালগ \ ব্লক \ পণ্য \ দেখুন \ অ্যাবস্ট্রাকভিউ ব্যবহার করে যে কোনও কাস্টম ব্লক অনুসন্ধান করেছি কিন্তু আমি এটি কেবলমাত্র লেআউট ফাইলগুলিতে পেয়েছি, এটি কোনও ব্লক শ্রেণীর কনস্ট্রাক্টরে উপস্থিত নেই

আমি যা বুঝতে পারি না তা হ'ল: কেন ম্যাগেন্টো সংকলিত কোড সহ এই মারাত্মক ত্রুটি ছুঁড়ে দিচ্ছে, তবে এটি সংকলিত কোড ছাড়াই মনোহরণের মতো কাজ করে


আপনি কি নিশ্চিত করতে পারবেন যে 'সেটআপ: ডি: কমাইল' বিকাশ মোডে পণ্য দর্শন ত্রুটির কারণও হয়?
paj

হ্যাঁ, উভয় মোডে মারাত্মক ত্রুটি ঘটে
রাউল সানচেজ

আপনি কি "সম্পূর্ণ অস্পষ্ট মারাত্মক ত্রুটি" পোস্ট করতে পারেন?
paj

আমি ত্রুটি সহ প্রশ্ন আপডেট করেছি। ধন্যবাদ
রাউল সানচেজ

উত্তর:


21

কমান্ড setup:di:compileকমান্ডটি var/diম্যাজেন্টো <2.2 এবং generated ম্যাগেন্টো> = 2.2 এর জন্য ফোল্ডারের সামগ্রী তৈরি করে

ম্যাজেন্টোর মতে, এটি নিম্নলিখিত উদ্দেশ্যগুলি সরবরাহ করে:

  • অ্যাপ্লিকেশন কোড জেনারেশন (কারখানা, প্রক্সি এবং অন্যান্য)
  • অঞ্চল কনফিগারেশন সমষ্টি (এটি প্রতি অঞ্চল অনুকূলিতকরণ ইনজেকশন কনফিগারেশন)
  • ইন্টারসেপ্টর জেনারেশন (এটি, ইন্টারসেপ্টরের অনুকূলিতকরণ কোড উত্পাদন)
  • ইন্টারসেপশন ক্যাশে প্রজন্ম
  • সংগ্রহস্থলগুলির কোড উত্পন্নকরণ (এটি, এপিআইগুলির জন্য উত্পন্ন কোড)
  • পরিষেবা ডেটা বৈশিষ্ট্য উত্পন্ন করে (এটি ডেটা অবজেক্টগুলির জন্য উত্পন্ন এক্সটেনশন ক্লাস)

উত্স ( http://devdocs.magento.com/guides/v2.0/config-guide/cli/config-cli-subcommands-compiler.html )

যাইহোক, আপনি যখন উত্পাদনের মোডে ম্যাজেন্টো স্থাপন করেন, সংকলন ছাড়াই এটি এখনও কার্যকর হয়। সুতরাং ম্যাজেন্টো ডক্স অনুসারে এটি আরও একটি অপ্টিমাইজেশন পদক্ষেপ (এটি হ'ল ইন্টারসেপ্টরের কোডাইজড অপ্টিমাইজড)

setup:di:compileকমান্ডটিতে যখন আমাদের ত্রুটি থাকে তখন এটি বেশিরভাগ ক্ষেত্রে কাস্টম পিএইচপি ক্লাসের অন্যতম নির্মাণকারীর ত্রুটির কারণে হয়।


1
ধন্যবাদ! সুতরাং, এটি সম্পূর্ণ alচ্ছিক ... কেবলমাত্র একটি পয়েন্ট, তাই এটি আমার কাছে আরও স্পষ্ট। আমাদের ক্ষেত্রে, সেটআপ: di: সংকলন কোনও ত্রুটি ফেলে না, কমান্ডটি ঠিক আছে। কমান্ডটি শেষ হওয়ার পরে সাইটটি ব্রাউজ করার সময়, মারাত্মক ত্রুটিটি যখন পণ্য ভিউ পৃষ্ঠাগুলিতে বরখাস্ত করা হয়
রাউল সানচেজ

আপনি ত্রুটি পোস্ট করতে পারেন? এটি বিষয়টিকে আরও স্পষ্ট করে তুলবে।
টিজিৎসে

আমি ত্রুটি সহ প্রশ্ন আপডেট করেছি। ধন্যবাদ
রাউল সানচেজ

12

setup:di:compileকমান্ডটি প্রতিবার চালানো বাধ্যতামূলক নয় তবে আপনি যদি কারখানার পদ্ধতি, প্রক্সি, প্লাগইন বা কোনও কোড সংকলন বিশেষ করে কোনও কোড পরিবর্তন করে থাকেন তবে আপনাকে অবশ্যই এই কমান্ডটি চালানো দরকার।

আরো বিস্তারিত

magento setup:di:compileযাতে প্রয়োজনীয় ফাইল তৈরি করা যায়। উভয় বিকল্পের ক্লাস তৈরির সাথে শেষ হয় MAGENTO_ROOT/var/generation directory(বা /generatedযদি ম্যাজেন্টো ২.২++)।

কি ক্লাস উত্পন্ন হয়?

  1. কারখানা
  2. প্রক্সি
  3. প্লাগইন

কারখানা

কারখানাগুলি অবজেক্টগুলিকে ইনস্ট্যান্ট করতে ব্যবহৃত হয় যা স্বয়ংক্রিয়ভাবে ইনজেকশন দেওয়া যায় না। উদাহরণস্বরূপ, কোনও পণ্য অবজেক্টটি ডাটাবেস থেকে লোড করতে হয়, তবে নির্ভরতা ইনজেকশন ধারকটিতে এই অবজেক্টটি তৈরি করতে পর্যাপ্ত তথ্য নেই। এজন্য আমরা কারখানাগুলি ব্যবহার করি।

প্রক্সি

ম্যাজেন্টো 2 কনস্ট্রাক্টর ইঞ্জেকশন ব্যবহার করে যাতে সমস্ত নির্ভরতা প্রয়োজন required সমস্ত নির্ভরতা অতিক্রম করে আপনি কোনও বস্তুকে ইনস্ট্যান্ট করতে পারবেন না। আপনি যদি optionচ্ছিক নির্ভরতা পেতে চান? এই কারণেই প্রক্সি রয়েছে।

প্লাগইন (ইন্টারসেপ্টর)

সহজ কথায় বলতে গেলে, প্লাগইনগুলি Magento 2 এর প্রাথমিক কাস্টমাইজেশন পদ্ধতি class এটি আপনাকে আবেদনের যে কোনও পাবলিক পদ্ধতির আগে বা তার আশেপাশে কিছু করতে এবং কিছু করার অনুমতি দেয়।

আপনি যখন সেটআপ চালাবেন: di: কমপাইল করুন এটি কাজগুলির নীচে করুন

কোড সংকলন কোনও নির্দিষ্ট ক্রমে নিম্নলিখিতগুলির সমন্বয়ে গঠিত:

  • অ্যাপ্লিকেশন কোড জেনারেশন (কারখানা, প্রক্সি এবং অন্যান্য)

  • অঞ্চল কনফিগারেশন সমষ্টি (এটি প্রতি অঞ্চল অনুকূলিতকরণ ইনজেকশন কনফিগারেশন)

  • ইন্টারসেপ্টর জেনারেশন (এটি, ইন্টারসেপ্টরের অনুকূলিতকরণ কোড উত্পাদন)

  • ইন্টারসেপশন ক্যাশে জেনারেশন রিপোজিটরি কোড কোড উত্পন্ন (এটি, এপিআইগুলির জন্য উত্পন্ন কোড)

  • পরিষেবা ডেটা বৈশিষ্ট্য উত্পন্ন করে (এটি ডেটা অবজেক্টগুলির জন্য উত্পন্ন এক্সটেনশন ক্লাস)

কখন আমাদের কমান্ডগুলি চালানো উচিত তার জন্য এই উত্তরটি দেখুন: /magento//a/184927/35758


ধন্যবাদ! সুতরাং, এটি সম্পূর্ণ alচ্ছিক ... কেবলমাত্র একটি পয়েন্ট, তাই এটি আমার কাছে আরও স্পষ্ট। আমাদের ক্ষেত্রে, সেটআপ: di: সংকলন কোনও ত্রুটি ফেলে না, কমান্ডটি ঠিক আছে। কমান্ড শেষ হওয়ার পরে, সাইটটি ব্রাউজ করার সময়, পণ্যের ভিউ পৃষ্ঠাগুলিতে যখন মারাত্মক ত্রুটি নষ্ট হয় ... তাই আমি সত্যিই বুঝতে পারি না যে সংকলিত কোডটি দুর্দান্ত কাজ করে না তবে সংকলন করার পরে মারাত্মক ত্রুটি ঘটে
রাউল সানচেজ

এটি ঘটতে পারে যদি আপনার উপ-শ্রেণি পিতৃ শ্রেণীর বিদ্যমান alচ্ছিক নির্ভরতার পরে নতুন নির্ভরতা যুক্ত করে। Anyচ্ছিকের উপরে যে কোনও নতুন প্রয়োজনীয় প্যারামিটারটি উপরে নিয়ে আপনি এটি ঠিক করতে পারেন।
যুবরাজ প্যাটেল

2

ম্যাজেন্টো তবুও প্রোডাক্টে চলবে এবং ডিআই: কম্পাইল কমান্ড ছাড়াই দেব dev এটি প্রকৃতপক্ষে ইন্টারসেপ্টরগুলি সংকলন করবে এবং generatedফোল্ডারে স্টোরটি প্রয়োজন হিসাবে এটি করা হবে ।

এমনকি যদি এটি কাজ করে তবে এর অর্থ এই নয় যে আপনার এই পদক্ষেপটি এড়ানো উচিত! প্রকৃতপক্ষে, এটি চালানো হলে, ম্যাজেন্টো নকল করা ইঞ্জেকশনগুলি, নির্ভরতা লুপগুলি এবং অন্যান্য মৌলিক পদক্ষেপগুলিও পরীক্ষা করে যা আপনার সাইটটিকে আরও স্থিতিশীল করে তুলবে এবং মারা যাওয়ার সম্ভাবনা কম করবে।

আমি দৃ strongly়ভাবে বিশ্বাস করি যে কোনও ত্রুটিযুক্ত নির্মাণকারী যুক্তির কারণে ম্যাজেন্টো সংকলন করতে পারে না এমন কোনও শ্রেণীর ব্যবহারের কারণে এই ত্রুটি is

আপনার পোস্ট করা ত্রুটিটি বেশ অস্পষ্ট, তবে আমি বিশ্বাস করি যে আপনার AbstractViewক্লাসটি ক্লাস প্রসারিত করেছে , 99% এটি আপনার কাস্টম মডিউলগুলির কোথাও একটি ব্লক যা parent::__construct()পদ্ধতিতে সঠিক যুক্তিগুলি পাস করে না । সুতরাং তাত্ক্ষণিকভাবে এটি ব্যর্থ হয়।

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

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


অন্যান্য বৈধ উত্তরের সাথে এই জাতীয় কোনও পুরানো প্রশ্নের উত্তর দেওয়ার জন্য সময় দেওয়ার জন্য ধন্যবাদ ... আসলে, আমি কাস্টম লেআউটে সেই ভুল ব্লকগুলি ঠিক করে এটি সমাধান করেছি, যেমনটি আপনি উল্লেখ করেছেন
রাউল সানচেজ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.