আমি কীভাবে হিরোকুতে আমার গিট রেপোর একটি উপ-ডিরেক্টরিকে স্থাপন / চালিত করতে পারি?


121

আমার একটি প্রকল্প রয়েছে যা সার্ভ ব্যবহার করে এবং গিট ব্যবহার করে সংস্করণটি নিয়ন্ত্রিত। সার্ভ outputস্ট্যাটিক ফাইলগুলির সাথে একটি ফোল্ডার তৈরি করে যা আমি হিরোকুতে স্থাপন করতে চাই।

আমি হিরোকু সিডার স্ট্যাকটি খুব পছন্দ করে না বলে সার্ভ প্রকল্পটি নিজেই স্থাপন করতে চাই না, তবে সবচেয়ে বড় কথা হ'ল স্থির ওয়েবসাইটগুলির জন্য হেরোকুর দুর্দান্ত সমর্থনটি আমি নিতে চাই।

গিট রিমোটে সাবফোল্ডার মোতায়েন করার কি কোনও উপায় আছে? আমি কি outputফোল্ডারে একটি গিট রেপো তৈরি করতে পারি (যা ভুল বলে মনে হচ্ছে) এবং হেরোকুকে তা ঠেকানো উচিত?


উত্তর:


220

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

git subtree push --prefix output heroku master

এটি বর্তমানে উপস্থিত রয়েছে যে গিট-সাবট্রিটি গিট-কোরের সাথে অন্তর্ভুক্ত করা হচ্ছে, তবে গিট-কোরের সেই সংস্করণটি প্রকাশিত হয়েছে কিনা তা আমি জানি না।


1
হ্যাঁ, তবে সাবট্রিটি এখনও (1.8.0.2 অনুযায়ী) গিট ইনস্টলারের মাধ্যমে অন্তর্ভুক্ত নেই । ভাগ্যক্রমে উত্স থেকে ইনস্টল করা দ্রুত এবং সোজা, এই পৃষ্ঠাটি ম্যাকের জন্য আমার পক্ষে কাজ করেছিল।
dribnet

14
আপনার যদি প্রয়োজন হয় --force, ব্যবহার করুন git push heroku `git subtree split --prefix output master`:master --forceস্ট্যাকওভারফ্লো . com/a/15623469/2066546 দেখুন ।
ফিডেল

2
তবে কোনও নির্দিষ্ট ট্যাগকে ধাক্কা দেওয়ার সঠিক উপায় কী। আমি ভেবেছিলাম এটা হওয়া উচিত git subtree push --prefix output heroku +refs/tags/v1.0.0:refs/heads/master। তবে এটি কাজ করে না এবং ফিরে আসে +refs/tags/v1.0.0:refs/heads/master does not look like a ref। পরে নির্দিষ্ট ট্যাগগুলিতে রোলব্যাক করতে সক্ষম হতে আমার এই জাতীয় কার্যকারিতা দরকার। এটি করার সঠিক উপায় কী?
ডেনিস

1
আমি ত্রুটি পেয়েছি 'আপডেটগুলি প্রত্যাখ্যান করা হয়েছিল কারণ একটি ধাক্কা দেওয়া শাখার টিপটি এর রিমোটের পিছনে রয়েছে'
অ্যালারি

2
@ এবং-দেব @ এরিক বুরেল আমি নির্দিষ্টভাবে বিনা প্রয়োজনে outputকেবলমাত্র আমার developশাখায় উপস্থিত ফোল্ডারটি সফলভাবে ধাক্কা দিয়েছি , সুতরাং স্পষ্টতই এটি আপনার বর্তমানে যাচাই করা শাখা থেকে নির্দিষ্ট করে দেওয়া টার্গেট শাখায় ধাক্কা দেয়। heroku masterdevelop:master
সিআরসিক্র্যাক

10

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

cd bin
git init
git add .
git commit -m"deploy"
git push git@heroku.com:your-project-name.git -f
rm -fr .git

আমার ধারণা অফিসিয়াল git subtreeসেরা উত্তর, তবে আমার ম্যাকটিতে কাজ করার জন্য সাবট্রি দেওয়ার বিষয়টি আমার ছিল।


9

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

#!/bin/bash

#change to whichever directory this lives in
cd "$( dirname "$0" )"

#create new git repository and add everything
git init
git add .
git commit -m"init"
git remote add heroku git@heroku.com:young-rain-5086.git

#pull heroku but then checkback out our current local master and mark everything as merged
git pull heroku master
git checkout --ours .
git add -u
git commit -m"merged"

#push back to heroku, open web browser, and remove git repository
git push heroku master
heroku open
rm -fr .git

#go back to wherever we started.
cd -

আমি নিশ্চিত যে এটির উন্নতি করার প্রচুর উপায় রয়েছে - সুতরাং আমাকে কীভাবে নির্দ্বিধায় বলুন!


+1ধন্যবাদ। আপনি যদি হিরোকুতে গিট লগ সম্পর্কে চিন্তা না করেন তবে এই সমাধানটি দুর্দান্ত কাজ করে। অ্যাপ্লিকেশন সাব পাথের মধ্যে মোতায়েনের জন্য কিছু ফোল্ডার আপনি উপেক্ষা করতে চান এমন ক্ষেত্রে কেউ স্ক্রিপ্টের উপরের দিকে ঝাঁকুনি দিতে পারে। উদাহরণস্বরূপ আমি specহিরকুতে ফোল্ডার চাইনি। গিস্ট উদাহরণ
ch4nd4n

+1তবে আপনি টানতে এবং হিরকু মাস্টারটিতে মার্জ না করে সহজ করে তুলতে পারেনgit push --force heroku master
এমকে সাফি

4

দীর্ঘ এবং কঠোর মাস পরে বিভিন্ন জিনিস চেষ্টা করার এবং প্রতিবার কামড়ানোর সময় আমি বুঝতে পেরেছি,

হিরোকু একটি গিট সংগ্রহস্থলটিকে একটি মোতায়েনের ব্যবস্থা হিসাবে ব্যবহার করার কারণে, আপনি এটিকে গিট সংগ্রহস্থল হিসাবে ব্যবহার করবেন না

এটি ঠিক একইভাবে আরএসএনসিও হতে পারে, তারা গিটের জন্য গিয়েছিল, এর কারণে বিভ্রান্ত হবেন না

যদি আপনি এটি করেন তবে আপনি নিজেকে সমস্ত ধরণের আঘাতের জন্য উন্মুক্ত করেন। উপরে উল্লিখিত সমস্ত সমাধান কোথাও কোথাও খারাপভাবে ব্যর্থ:

  1. এটির জন্য প্রতিবার, বা পর্যায়ক্রমে কিছু করা দরকার বা অপ্রত্যাশিত কিছু ঘটে (সাবমডিউলগুলি পুশ করা, সাবট্রিজগুলি সিঙ্ক করা, ...)
  2. যদি আপনি উদাহরণস্বরূপ কোনও কোড ইঞ্জিন ব্যবহার করে আপনার কোডটি আধুনিকীকরণ করেন, বান্ডিলার আপনাকে জীবিত খাবেন, এর ভাল সমাধানের সন্ধানের জন্য এই প্রকল্পের সাথে আমি যে পরিমাণ হতাশার মুখোমুখি হয়েছিল তা বর্ণনা করা অসম্ভব impossible
    • আপনি ইঞ্জিনটি গিট রেপো লিঙ্ক হিসাবে যুক্ত করার চেষ্টা করছেন + bundle deploy- ব্যর্থ, আপনার প্রতিবার আপডেট বান্ডিল করা দরকার
    • আপনি ইঞ্জিনটিকে :path+ হিসাবে যুক্ত করার চেষ্টা করেন bundle deploy- ব্যর্থ হন, দেব দলটি :pathবিকল্পটিকে "আপনি এই রত্ন বিকল্পের সাহায্যে বান্ডিলার ব্যবহার করছেন না" হিসাবে বিবেচনা করে তাই এটি উত্পাদনের জন্য বান্ডিল করবে না
    • এছাড়াও, ইঞ্জিনের প্রতিটি রিফ্রেশ আপনার রেলটিকে স্ট্যাক -_- আপডেট করতে চায়
  3. আমি যে সমাধান পেয়েছি তা হ'ল ইঞ্জিনটিকে /vendorবিকাশে একটি সিমিলিংক হিসাবে ব্যবহার করা , এবং প্রকৃতপক্ষে উত্পাদনের জন্য ফাইলগুলি অনুলিপি করা

সমাধান

অ্যাপ্লিকেশনটিতে প্রশ্নের মধ্যে 4 টি প্রকল্প রয়েছে:

  1. এপিআই - প্রোফাইলের উপর নির্ভর করে 2 টি ভিন্ন হিরকু হোস্টে চলবে - আপলোড এবং এপিআই
  2. ওয়েব - ওয়েবসাইট
  3. ওয়েব-পুরানো - পুরানো ওয়েবসাইট, এখনও মাইগ্রেশনে রয়েছে
  4. সাধারণ - একটি ইঞ্জিনে নিষ্ক্রিয় সাধারণ উপাদান

সমস্ত প্রকল্পের ইঞ্জিনের vendor/commonমূলের দিকে তাকাতে একটি সিমিলিংক রয়েছে common। হিরকুতে মোতায়েনের জন্য উত্স কোডটি সংকলন করার সময় আমাদের প্রতিটি পৃথক হোস্টের বিক্রেতার ফোল্ডারে শারীরিকভাবে থাকা সিমিলিংকটি আর এসএসএনসি প্রয়োজন।

  1. আর্গুমেন্ট হিসাবে হোস্টনামের একটি তালিকা গ্রহণ করে
  2. আপনার ডেভলপমেন্ট রেপোতে একটি গিট পুশ চালায় এবং তারপরে কোনও পৃথক ফোল্ডারে একটি ক্লিন গিট টান চালান, এটি নিশ্চিত করে যে হোস্টগুলিতে কোনও নোংরা (নিঃশব্দ) পরিবর্তনগুলি স্বয়ংক্রিয়ভাবে ঠেলাঠেলি করে না making
  3. সমান্তরালভাবে হোস্টকে মোতায়েন করে - প্রতিটি হিরকু গিট রেপো টানানো হয়, নতুন কোডটি সঠিক জায়গাগুলিতে সেন্সর করা হয়, গিট কমিট মন্তব্যে বেসিক পুশ তথ্য সহ কমিট করা হয়,
  4. শেষ পর্যন্ত, আমরা শখের হোস্টকে ঘুম থেকে উঠতে এবং লগগুলিতে লেগ রাখতে বলুন যে সমস্ত ওয়াইন হয়েছে কিনা তা দেখতে কার্লের সাথে একটি পিং পাঠাই
  5. জেনকিন্সের সাথেও দুর্দান্ত খেলে: ডি (সফল পরীক্ষার পরে সার্ভারগুলি পরীক্ষা করার জন্য স্বয়ংক্রিয় কোড পুশ)

এখন 6 মাসে ন্যূনতম (না?) সমস্যা সহ বুনোতে খুব সুন্দর কাজ করে

এখানে স্ক্রিপ্টটি https://gist.github.com/bbozo/fafa2bbbf8c7b12d923f

আপডেট 1

@ অ্যাডামবুজিনিস্কি, এটি এত সোজা আর কখনও নয়।

1 ম আপনার সর্বদা কমপক্ষে একটি উত্পাদন এবং পরীক্ষার পরিবেশ থাকবে - এবং আরও খারাপ সময়ে ফাংশন নির্দিষ্ট ক্লাস্টারগুলির একগুচ্ছ হঠাৎ 1 ফোল্ডারের একটি হিরকু প্রকল্পগুলিকে একটি মুল বেসিক প্রয়োজনীয়তা হিসাবে মানচিত্রের প্রয়োজন এবং এটি সমস্তরকমভাবে কোনওভাবে সংগঠিত হওয়া দরকার স্ক্রিপ্টটি "জানে" আপনি কোথায় উত্স স্থাপন করতে চান,

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

তৃতীয়টি আপনি সিআই-তে প্লাগ করতে চাইবেন এবং এটি সাবফোল্ডার এবং গিট রেপোকে কীভাবে সংগঠিত করা দরকার তা কিছুটা বদলে যাবে, সর্বোপরি সহজ ব্যবহারের ক্ষেত্রে আপনি উপরে বর্ণিত সংক্ষেপে শেষ করতে পারেন।

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

আমার সত্যিই একটি রেকফিল বা কিছুতে বান্ডিলিং জিনিসগুলি অন্বেষণ করা উচিত এবং সেভাবে সবকিছু করা উচিত ...


হাই @bbozo, আপনি কি নিজের সমাধানটি কিছুটা ঘনীভূত করতে এবং নির্দিষ্ট নির্দিষ্ট সাব ফোল্ডারটিকে একটি নির্দিষ্ট হিরকু প্রকল্পে স্থাপনের ক্ষেত্রে ব্যবহারের সাথে নির্দিষ্ট করে এবং হেরোকুর সাথে নির্দিষ্ট / প্রয়োজনীয় নয় এমন সমস্ত জিনিস বের করার বিষয়ে মনে করবেন?
অ্যাডাম রিস

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

একটি "নিযুক্ত স্ক্রিপ্ট" থেকে ভয় পাবেন না, এটি প্রদান করে
bbozo
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.