Heroku'da evreleme örneği


85

Kodu dev.myapp.comtest etmek için ve daha sonra www.myapp.comüretim kullanımı için gönderebilmek istiyorum . Bu Heroku ile mümkün mü?

Yanıtlar:


142

Heroku arayüzünüz aslında bir Git dalı. Heroku cevheri, API'leri aracılığıyla bazı işler yapar, ancak Git deponuzda, bu yalnızca yeni bir uzak daldır.

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

Heroku'da birden fazla uygulama kurduğunuzda, Git deponuzu şu şekilde yapılandırabilmelisiniz:

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

Genellikle 'çalışan' bir dalda çalışıyorum ve ustam için Github kullanıyorum.

Bunun sizin için geçerli olduğunu varsayarsak, dağıtım iş akışınız muhtemelen şuna benzer:

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

Teşekkürler - bu biraz mantıklı (git de berbatım). Soru: Dal "uçta" bazı son teknoloji değişiklikler üzerinde çalıştığımı varsayalım. Uygulamamı etkilemeden (şu anda ana dalda çalışan) bu dalı evreleme uygulamasına nasıl itebilirim? Mı git push staging edge work?
Tom Lehman

Gitmeniz için, sadece hazırlık dalınızın kenarını birleştirir ve onu zorlarsınız. Üretim şubeniz ayrı ve temiz. Her zaman dallandırabilir ve yalnızca orada birleşen değişiklikler yapabilirsiniz.
Luke Bayes

5
Varsayılan 'heroku' uzak dalıyla uygulamalar oluşturmak yerine ve onu sildikten sonra, çok daha hoş bir çözüm kullanabilirsiniz:heroku create yourapp --remote your-remote
dombesz

2
Bunu bir kez ayarladıktan sonra, tüm herokukomutlarınızın --app stagingveya eklemesi gerekir --app production. Varsayılan ayarlamanın herhangi bir yolu var mı? (Yorum olarak sormak, çünkü bu, tam teşekküllü bir SO sorusu olmak için fazla hedeflenmiş görünüyor.)
Paul A Jungwirth

3
@PaulAJungwirth Varsayılan bir Heroku uygulaması ayarlamak için "git config heroku.remote staging" gibi bir şey kullanın. Devcenter.heroku.com/articles/multiple-environment adresindeki Heroku belgelerinde daha fazlası .
grifaton


10

Orijinal sorunun önemli bir kısmı, hazırlık uygulamasını ana uygulamanın (www.myapp.com) bir alt etki alanına (dev.myapp.com) bağlamakla ilgilidir. Bu yanıtların hiçbirinde ele alınmadı.

Adım 1: Uygulamanızın hem üretim ("uygulamam") hem de aşamalı ("staging-myapp") sürümlerini Luke Bayes'in yanıtında belirtildiği gibi yapılandırın

2. Adım: Etki alanı yönetim sisteminizde (ör. GoDaddy):

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

Adım 3: Heroku'yu dev.myapp.com'u staging-myapp'a yönlendirecek şekilde yapılandırın:

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

CNAME kaydının yayılması için zaman bulduktan sonra, hazırlama uygulamanızı dev.myapp.com adresinde çalıştırabilirsiniz.


1
erişim kontrolüne ne dersiniz, böylece Google'da vb. görünmesin ve insanlar yanılmıyor ve bunun gerçek olduğunu düşünmesin? güzel çözümler var mı?
brittohalloran

Evet, en kolay yol GoDaddy adımını atlamak ve uygulamanızın "geliştirici" sürümüne Heroku URL'sini kullanarak doğrudan Heroku etki alanı dışından erişmektir. (örn. stormy-lake-5483.heroku.com. ) Bununla birlikte, burada açıklandığı gibi alan adınızın 'dev' olmasını istiyorsanız, google, bing, et. al. geliştirici sitenizi dizine eklememek için. Bu, onu arama motorlarından uzak tutmaya yardımcı olacaktır.
Don Leatham

Hazırlamada HER ŞEYİ yakalamak ve kullanıcıyı yönetici olarak oturum açmaya zorlamak için bir before_filterkanca application_controllerekledim ve ardından uygulamayı bir 'yönetici olmayan' bakış açısından görebilmek için bir yönetici çerezi ayarladım. Benim için oldukça iyi çalışıyor.
brittohalloran


7

Artık işler daha kolay. İşte bunu nasıl yapıyorsun ...

Her ortam için bir uygulama oluşturun

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

Bu, içinde görebileceğiniz her uygulama için adlandırılmış uzak depolar oluşturacaktır .git/config.

Artık belirli bir uygulamayı hedeflemek için --app veya --remote anahtarlarını kullanabilirsiniz:

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

Rails ortamlarını ayarlayın

Rails uygulamaları için Heroku varsayılan olarak "üretim" ortamına ayarlanır . Hazırlama uygulamanızın bir hazırlık ortamında çalışmasını istiyorsanız , ortamı projenizde oluşturun ve uygulamada ilgili RAILS_ENV ve RAKE_ENV ortam değişkenlerini ayarlayın :

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

Ortamları yapılandırın

Başka yapılandırma değişkenleriniz varsa, bunları her ortam için de aktarmanız gerekir.

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

Yine de bu çok büyük bir acı bu yüzden sadece snappconfig taşımı kullanıyorum ve

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

projemin YAML yapılandırma dosyalarını Heroku'ya yüklemek için.

Dağıtmak

Şimdi Heroku'ya şu şekilde itin:

$ git push staging master
$ git push production master

ve şu şekilde göç edin:

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

(Daha fazla bilgi ve kısayollar için Bir Uygulama İçin Birden Fazla Ortamı Yönetme | Heroku Geliştirici Merkezi'ne bakın.)


Ayarlama RAILS_ENVve RACK_ENVyapma staging, Heroku tarafından önerilmiyor: "" staging "gibi başka bir özel ortam oluşturmak ve bir config / environment / staging.rb oluşturmak ve RAILS_ENV = staging ile bir Heroku uygulamasına dağıtmak cazip gelebilir. Bu iyi bir uygulama değildir. . Bunun yerine, her zaman üretim modunda çalışmanızı ve yapılandırma değişkenlerinizi ayarlayarak herhangi bir davranışı değiştirmenizi öneririz. " Bununla
Koen.

@ Koen- Karmaşık Rails yapılandırmalarını ortam bağlamı olmadan yönetmeye çalışmak, ister Heroku'da ister başka bir şekilde deneyimime göre tamamen pratik değil. Aşama uygulamanız için bir dizi bağlantı dizeniz, API anahtarınız vb. Varsa ve üretim uygulamanız için başka bir tane varsa, bu yapılandırma değişkenlerini gerçekten her biri için ayrı ayrı ayarlayacak mısınız? Bu sadece bela istiyor - Heroku burada kötü tavsiye veriyor.
Yarin

Teşekkürler. Muhtemelen commithash ile gerçek bir URL elde eden bir evreleme arıyorum. Bunun Zeit Now veya Netlify'nin kolaylaştırdığı bir şey olduğunu düşünüyorum.
Polv
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.