हेरोकू पर मंचन उदाहरण


85

मैं कोड को dev.myapp.comपरीक्षण के लिए और फिर www.myapp.comउत्पादन उपयोग के लिए पुश करने में सक्षम होना चाहता हूं । क्या यह हेरोकू के साथ संभव है?

जवाबों:


142

हरोकू के लिए आपका इंटरफ़ेस अनिवार्य रूप से एक गिट शाखा है। हेरोकू रत्न अपने एपीआई के माध्यम से कुछ काम करता है, लेकिन आपके गिट रिपॉजिटरी के भीतर, यह सिर्फ एक नई दूरस्थ शाखा है।

heroku create yourapp # production
git br -D heroku # delete the default branch

heroku create staging-yourapp # staging
git br -D heroku # delete the default branch

एक बार जब आप हरोकू पर कई एप्लिकेशन सेट करते हैं, तो आपको अपने गिट रिपॉजिटरी को इस तरह कॉन्फ़िगर करने में सक्षम होना चाहिए:

git remote add staging git@heroku.com:staging-yourapp.git
git push origin staging

git remote add production git@heroku.com:yourapp.git
git push origin production

मैं आमतौर पर 'वर्किंग' ब्रांच में काम करता हूं, और अपने गुरु के लिए जीथब का इस्तेमाल करता हूं।

यह मानते हुए कि आपके लिए मामला, आपके तैनात वर्कफ़्लो शायद कुछ इस तरह दिखाई देंगे:

git co -b working
# do some work

# push to github:
git co master
git merge working
git push

# push to staging:
git co staging
git merge master
git push origin staging

# push to production
git co production
git merge master
git push origin production

धन्यवाद - यह कुछ समझ में आता है (मैं गिट पर चूसना)। प्रश्न: मान लीजिए कि मैं शाखा "किनारे" पर कुछ अत्याधुनिक परिवर्तनों पर काम कर रहा हूं। मैं उस शाखा को मयप्प (जो वर्तमान में मास्टर शाखा पर चल रहा है) को प्रभावित किए बिना स्टेजिंग-मयप पर कैसे धकेल सकता हूं? करता है git push staging edge work?
टॉम लेहमन

आपको जाने के हित में, आप बस अपने मचान शाखा में विलय कर देंगे और इसे धक्का देंगे। आपकी उत्पादन शाखा अलग और साफ है। आप इसे हमेशा ब्रांच कर सकते हैं और ऐसे बदलाव कर सकते हैं जो केवल वहीं वापस मर्ज करें।
ल्यूक बेय्स

5
डिफ़ॉल्ट 'heroku' दूरस्थ शाखा के साथ एप्लिकेशन बनाने और इसे हटाने के बजाय, आप बहुत अच्छे समाधान का उपयोग कर सकते हैं जैसे:heroku create yourapp --remote your-remote
dombesz

2
एक बार जब आप इसे सेट करते हैं, तो आपके सभी herokuआदेशों को शामिल करने --app stagingया करने की आवश्यकता होती है --app production। क्या कोई डिफ़ॉल्ट सेट करने का कोई तरीका है? (एक टिप्पणी के रूप में पूछें b / c यह भी एक पूर्ण SO SO प्रश्न होने के लिए लक्षित है।)
पॉल ए जुंगविर्थ

3
@PaulAJungwirth एक डिफ़ॉल्ट Heroku ऐप सेट करने के लिए, "git config heroku.remote stit" जैसी किसी चीज़ का उपयोग करें। Devcenter.heroku.com/articles/multiple-en वातावरण पर हरोकू डॉक्स में अधिक
ग्रिफटन


10

मूल प्रश्न का एक मुख्य भाग मुख्य ऐप (www.myapp.com) के स्टेजिंग ऐप को एक उपडोमेन (dev.myapp.com) से जोड़ने के बारे में है। यह किसी भी उत्तर में संबोधित नहीं किया गया है।

चरण 1: ल्यूक बेयस के उत्तर में इंगित किए गए दोनों उत्पादन ('myapp') और आपके ऐप के स्टेजिंग ('स्टेजिंग-मैप्प') को कॉन्फ़िगर करें

चरण 2: अपने डोमेन प्रबंधन प्रणाली में (जैसे GoDaddy):

Create a CNAME record:  dev.myapp.com 
that points to:   proxy.heroku.com

चरण 3: हेरोकू को स्टेजिंग- myapp पर dev.myapp.com पर कॉन्फ़िगर करें:

heroku domains:add dev.myapp.com --app staging-myapp

CNAME रिकॉर्ड को प्रचारित करने का समय होने के बाद, आप dev.myapp.com पर अपना स्टेजिंग ऐप चला सकेंगे।


1
अभिगम नियंत्रण के बारे में कैसे यह Google इत्यादि में दिखाई नहीं देता है और लोग इस पर ठोकर नहीं खाते हैं और इसकी असली बात सोचते हैं? कोई अच्छा समाधान?
ब्रिटोहॉलोरन

हां, सबसे आसान तरीका है GoDaddy स्टेप को छोड़ना और अपने ऐप के "देव" वर्जन को हरोकू URL का उपयोग करके सीधे हरोकू डोमेन से एक्सेस करना। (जैसे तूफ़ानी-lake-5483.heroku.com। ) हालाँकि, यदि आप यहाँ वर्णित के रूप में अपने डोमेन से 'देव' रखना चाहते हैं, तो आप google, bing, et बताने के लिए हमेशा robots.txt फ़ाइल स्थापित कर सकते हैं। अल। अपने देव स्थल को अनुक्रमित नहीं करने के लिए। जो इसे सर्च इंजन से बाहर रखने में मदद करेगा।
डॉन लेथम

मैंने चरणबद्ध तरीके से EVERYTHING को पकड़ने और उपयोगकर्ता को एक व्यवस्थापक के रूप में लॉगिन करने के लिए मजबूर करने के before_filterलिए एक हुक जोड़ना समाप्त कर दिया application_controller, फिर एक व्यवस्थापक कुकी सेट करें ताकि मैं अभी भी 'गैर-व्यवस्थापक' के दृष्टिकोण से ऐप देख सकूं। मेरे लिए बहुत अच्छा काम कर रहा है।
ब्रिटोहॉलोरन

8

आपको heroku_san की जांच करनी चाहिए

यह हरोकू पर वातावरण के साथ बहुत अच्छा काम करता है।


7

हालात अब आसान हैं। यहाँ आप इसे कैसे करते हैं ...

प्रत्येक वातावरण के लिए एक ऐप बनाएं

$ heroku create myapp --remote production
$ heroku create myapp-staging --remote staging

यह प्रत्येक ऐप के लिए रिमोट रिपॉजिट बनाएगा, जिसे आप देख सकते हैं .git/config

अब आप किसी विशेष ऐप को लक्षित करने के लिए या तो --app या --remote स्विच का उपयोग कर सकते हैं :

$ heroku info --app myapp-staging
$ heroku info --remote staging

रेल वातावरण सेट करें

रेल एप्लिकेशन के लिए, हरोकू "उत्पादन" वातावरण में चूकता है । आप अपने मचान अनुप्रयोग एक स्टेजिंग वातावरण में चलाना चाहते हैं, माहौल बनाने अपनी परियोजना में और इसी सेट RAILS_ENV और RAKE_ENV एप्लिकेशन पर वातावरण चर:

$ heroku config:set RACK_ENV=staging RAILS_ENV=staging --remote staging

वातावरण को कॉन्फ़िगर करें

यदि आपके पास अन्य कॉन्फ़िगरेशन चर हैं, तो आपको उन्हें प्रत्येक वातावरण के लिए भी पास करना होगा।

$ heroku config:set AWS_KEY=abc --remote staging
$ heroku config:set AWD_SECRET=123 --remote staging
...etc

यह एक बहुत बड़ा दर्द है, इसलिए मैं सिर्फ अपने स्नैप्पकॉफ मणि का उपयोग करता हूं और चलाता हूं

$ rake heroku:config:load[myapp-staging]

लोड करने के लिए हरोकू में मेरी परियोजना के YAML विन्यास फाइल को लोड करें।

तैनाती

अब आप बस इस तरह से हरखू को धक्का देते हैं:

$ git push staging master
$ git push production master

और इस तरह माइग्रेट करें:

$ heroku run rake db:migrate --remote staging
$ heroku run rake db:migrate --remote production

( एक ऐप के लिए कई वातावरण का प्रबंधन देखें । अधिक जानकारी और शॉर्टकट के लिए हरोकू देव केंद्र ।)


हरोकू द्वारा सेटिंग करना RAILS_ENVऔर RACK_ENVउसे stagingहतोत्साहित करना : "यह एक और कस्टम वातावरण बनाने का प्रलोभन दे सकता है जैसे" स्टेजिंग "और एक कॉन्फिग / एन्वायरमेंट / स्टैगेजिंग। आरबी और Roku_ENV = स्टेजिंग के साथ एक हरोकू ऐप पर तैनात करना। यह एक अच्छा अभ्यास नहीं है। इसके बजाय, हम हमेशा उत्पादन मोड में चलने की सलाह देते हैं और आपके कॉन्फिग वर्जन को सेट करके किसी भी व्यवहार को संशोधित करते हैं। " इस पर यहाँ अधिक: devcenter.heroku.com/articles/…
Koen।

@ कोएन- पर्यावरण के संदर्भ के बिना जटिल रेल विन्यासों को प्रबंधित करने की कोशिश करना मेरे अनुभव में पूरी तरह से अव्यावहारिक है, चाहे वह हरकोक पर हो या अन्यथा। यदि आपके पास अपने स्ट्रैजिंग ऐप के लिए कनेक्शन स्ट्रिंग्स, एपीआई कुंजियों आदि का एक पूरा सेट है और आपके प्रोडक्शन ऐप के लिए दूसरा है, तो क्या आप वास्तव में प्रत्येक के लिए व्यक्तिगत रूप से उन कॉन्फ़िगरेशन वेरिएंट को सेट करने वाले हैं? वह सिर्फ परेशानी के लिए पूछ रहा है- हेरोकू यहां बुरी सलाह दे रहा है।
यारिन

धन्यवाद। मैं मंचन के लिए देख रहा हूं कि वास्तव में एक वास्तविक URL मिलता है, शायद कमिट के साथ। मुझे लगता है कि यह कुछ ऐसा है जिसे Zeit Now या Netlify ने आसान बना दिया है।
पोलेव
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.