BeeGo konusunda bi el atın da ilerliyeyim :)

214 views
Skip to first unread message

murat ozalp

unread,
Aug 25, 2015, 7:02:40 AM8/25/15
to Golang Türkiye
Merhaba herkes;

Hem Go'da hem de BeeGo'da (ve hatta Heroku'da) yeniyim. Ufak tefek projelerimi yapmak için biraz hakim olmak istiyorum. Performans, güvenlik gibi derdim yok. Önceliğim: kolaylık.
Go maceram sırasında yol öykülerimi de bloğumda paylaşmayı düşünüyorum. Benim gibi acemilerin işine yarar diye. İlk bölümü şurada yayınladım: http://web.bilecik.edu.tr/murat-ozalp/2015/08/23/go-golang-programlama-dili-maceram/
Yoldaki ikinci hedefim; BeeGo ile bir basit uygulama oluşturup bunu ücretsiz bir yerde (Heroku kolay geldi bana) basitçe yayınlamaktı. Ancak beceremedim.

Konsolda yaptığım işlemler şöyle:
go get github.com/beego/bee
go
get github.com/tools/godep
wget
-O- --no-check-certificate https://toolbelt.heroku.com/install-ubuntu.sh | sh
sudo apt
-get install -y --force-yes heroku-toolbelt

cd $GOPATH
/src
bee
new ilkuygulama
cd ilkuygulama
rm
-rf tests    ### bu silinmezse, heroku push yaparken hata veriyor. Şöyle: HATA: remote: go build bigo-deneme/tests: no buildable Go source files in /tmp/build_3cfd188df9dbd563b1d3bec4e9f7a92a/.heroku/go/src/bigo-deneme/tests

bee run  
### http://local
host:8080 olarak test edilebilir.
git init
heroku login
heroku create
-b https://github.com/heroku/heroku-buildpack-go.git ilkuygulama
echo
"web: ilkuygulama" > Procfile
godep save
-r ./...
git add
-A .
git commit
-m "ilk kodlar"
git push heroku master
heroku logs
--tail &
heroku open

Aldığım hata:
app[web.1]: 2015/08/25 10:51:38 [asm_amd64.s:2232] [I] http server Running on :8080
heroku
[web.1]: Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch
heroku
[web.1]: Stopping process with SIGKILL
heroku
[web.1]: State changed from starting to crashed
heroku
[web.1]: Process exited with status 137

Beego'nun standart portu 8080 olduğu için, Heroku da bu porta izin vermediği için kullanamıyorum. Burası tamam. Ama conf/app.conf içerisinde envai çeşit değişiklik denedim, beceremedim bir türlü. Mesela ilgili port satırını sildiğimde verdiği hata mesajı da şöyle:
2015-08-25T11:00:38.417973+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=ilkuygulama.herokuapp.com request_id=90e8e091-05d7-4a86-a7d6-3bd032caf46e fwd="79.123.224.152" dyno= connect= service= status=503 bytes=

Yol gösterebilirseniz, çok sevineceğim. Herkese iyi çalışmalar dilerim.

2651

Recai Oktaş

unread,
Aug 25, 2015, 7:41:23 AM8/25/15
to gola...@googlegroups.com
Merhaba,

Beego yapılandırmasındaki port seçeneğine bakın.  Bu konuda bir issue bile girilmiş:


Alternatif olarak Heroku üzerinde konuşlandırılan örnek bir beego uygulamasında ortam değişkeni[1] üzerinden port'u tanımlayabilirsiniz:


[1] Heroku'da ortam değişkenleri: https://devcenter.heroku.com/articles/config-vars

25 Ağustos 2015 14:02 tarihinde murat ozalp <cun...@gmail.com> yazdı:

--
Bu iletiyi Google Grupları'ndaki "Golang Türkiye" grubuna abone olduğunuz için aldınız.
Bu grubun aboneliğinden çıkmak ve bu gruptan artık e-posta almamak için golang-tr+...@googlegroups.com adresine e-posta gönderin.
Daha fazla seçenek için https://groups.google.com/d/optout adresini ziyaret edin.



--
roktas

murat ozalp

unread,
Aug 25, 2015, 8:02:01 AM8/25/15
to Golang Türkiye
Hocam, 963 numaralı issue, benim de bahsettiğim conf/app.conf dosyasında kullanılabilecek olan httpport değişkeninden bahsediyor. Bunu faeklı şekillerde denedim zaten. Mesela o değişkeni 80 yaptığımda aşağıdaki hatayı alıyorum:
[asm_amd64.s:2232] [C] ListenAndServe: %!(EXTRA *net.OpError=listen tcp :80: bind: permission denied)
Normal bir sistemde bu hata normal zaten. 1024 altı portlar korumalı olduğu için, yetkili kullanıcı açabilir sadece. Kendi sistemimde böyle bir durumda binary dosyanın başına "sudo" yazdığımda, sorun kalmıyor.

Diğer taraftan portu 8080 yaparsam (Beego'nun default ayarlarında böyle zaten), o zaman sorunsuz dinliyor. Ancak Heroku'daki izole ortamda 8080 portunu kullanmaya çalışmak çok saçma. Diğer taraftan bu sefer de uygulama crash oluyor nedense.

Aslında port ataması istemiyorum ben. Heroku standart olarak 80 portunu dinleyip, go uygulamasını çalıştırıyor. Beego framework kullandığımda neden 80'i kullanamadım, bunu anlamadım. "grep" ile tüm beego kütüphane dosyalarını anahtar sözcüklere göre süzdüm CONST olarak girilmiş birşey var mı diye, göremedim. Heroku'nun ortam değişkenlerinden de PORT, $PORT, \$PORT gibi zilyon tane deneme yaptım, hep aynı hataları alıyorum.

Recai Oktaş

unread,
Aug 25, 2015, 8:32:25 AM8/25/15
to gola...@googlegroups.com
Merhaba,

Heroku port'u ilgili proseste kendisi ayarlıyor olmalı zaten.  Özel bir port ayarına ihtiyacınız yoksa yapmanız gereken bu port değerini prosesin ortam değişkenlerinden okumak. Önceki iletide verdiğim örnek uygulama linkine bakın.

25 Ağustos 2015 15:02 tarihinde murat ozalp <cun...@gmail.com> yazdı:

--
Bu iletiyi Google Grupları'ndaki "Golang Türkiye" grubuna abone olduğunuz için aldınız.
Bu grubun aboneliğinden çıkmak ve bu gruptan artık e-posta almamak için golang-tr+...@googlegroups.com adresine e-posta gönderin.
Daha fazla seçenek için https://groups.google.com/d/optout adresini ziyaret edin.



--
roktas

murat ozalp

unread,
Aug 25, 2015, 8:55:25 AM8/25/15
to gola...@googlegroups.com

Sanırım anladım, sonucu yazarım inş. Çok teşekkür ederim.

--
Sent from Mail.Ru app for Android

Tuesday, 25 August 2015, 03:32PM +0300 from Recai Oktaş <rok...@bil.omu.edu.tr>:

Merhaba,

Heroku port'u ilgili proseste kendisi ayarlıyor olmalı zaten.  Özel bir port ayarına ihtiyacınız yoksa yapmanız gereken bu port değerini prosesin ortam değişkenlerinden okumak. Önceki iletide verdiğim örnek uygulama linkine bakın.
25 Ağustos 2015 15:02 tarihinde murat ozalp<cun...@gmail.com> yazdı:
Hocam, 963 numaralı issue, benim de bahsettiğim conf/app.conf dosyasında kullanılabilecek olanhttpport değişkeninden bahsediyor. Bunu faeklı şekillerde denedim zaten. Mesela o değişkeni 80 yaptığımda aşağıdaki hatayı alıyorum:
[asm_amd64.s:2232] [C] ListenAndServe: %!(EXTRA*net.OpError=listen tcp:80: bind: permission denied)
Normal bir sistemde bu hata normal zaten. 1024 altı portlar korumalı olduğu için, yetkili kullanıcı açabilir sadece. Kendi sistemimde böyle bir durumda binary dosyanın başına "sudo" yazdığımda, sorun kalmıyor.

Diğer taraftan portu 8080 yaparsam (Beego'nun default ayarlarında böyle zaten), o zaman sorunsuz dinliyor. Ancak Heroku'daki izole ortamda 8080 portunu kullanmaya çalışmak çok saçma. Diğer taraftan bu sefer de uygulama crash oluyor nedense.

Aslında port ataması istemiyorum ben. Heroku standart olarak 80 portunu dinleyip, go uygulamasını çalıştırıyor. Beego framework kullandığımda neden 80'i kullanamadım, bunu anlamadım. "grep" ile tüm beego kütüphane dosyalarını anahtar sözcüklere göre süzdüm CONST olarak girilmiş birşey var mı diye, göremedim. Heroku'nun ortam değişkenlerinden de PORT, $PORT, \$PORT gibi zilyon tane deneme yaptım, hep aynı hataları alıyorum.

--
Bu iletiyi Google Grupları'ndaki "Golang Türkiye" grubuna abone olduğunuz için aldınız.
Bu grubun aboneliğinden çıkmak ve bu gruptan artık e-posta almamak içingolang-tr+...@googlegroups.com adresine e-posta gönderin.
Daha fazla seçenek içinhttps://groups.google.com/d/optout adresini ziyaret edin.



--
roktas

--
Bu iletiyi Google Grupları'ndaki "Golang Türkiye" grubuna abone olduğunuz için aldınız.
Bu grubun aboneliğinden çıkmak ve bu gruptan artık e-posta almamak içingolang-tr+...@googlegroups.com adresine e-posta gönderin.

Recai Oktaş

unread,
Aug 25, 2015, 8:57:33 AM8/25/15
to gola...@googlegroups.com
25 Ağustos 2015 15:55 tarihinde murat ozalp <cun...@gmail.com> yazdı:

Sanırım anladım, sonucu yazarım inş. Çok teşekkür ederim.

Biraz daha açayım.  ​​Heroku konuşlandırma parametrelerini (uygulamanın dinlediği port, veritabanı bağlantıları vs) uygulamayı taşıyan "dyno" için kendisi dinamik olarak belirliyor ve ortam değişkenleri üzerinden uygulamaya iletiyor.  Mekanizmanın ayrıntıları şöyle:

https://devcenter.heroku.com/articles/runtime-principles (port için yazdıklarına dikkat buyurun: "The port to bind to is assigned by Heroku as thePORT environment variable.")

Bu durumda ya Beego'nun yapılandırma dosyasında ortam değişkeni kullanarak port'u alacaksınız ki bunun için Beego'nun yapılandırma değişkenlerinde ortam değişkeni kullanımının desteklenmesi lazım (böyle bir destek göremedim) ya da örnek uygulamada ki gibi Beego'yu "boots​rap" ederken Heroku'nun atadığı portu okuyup ayarlayacaksınız.

--
roktas

murat ozalp

unread,
Aug 25, 2015, 9:23:18 AM8/25/15
to gola...@googlegroups.com

Ben tcp 80den Heroku ya gittikten sonra, içeride reverse proxy sayesinde dyno'nun aldığı rasgele porta aktarılıyor.  Değil mi?

--
Sent from Mail.Ru app for Android

Tuesday, 25 August 2015, 03:57PM +0300 from Recai Oktaş <rok...@bil.omu.edu.tr>:

--

Recai Oktaş

unread,
Aug 25, 2015, 9:29:38 AM8/25/15
to gola...@googlegroups.com
Evet, şöyle bir şey:




25 Ağustos 2015 16:23 tarihinde murat ozalp <cun...@gmail.com> yazdı:
Bu grubun aboneliğinden çıkmak ve bu gruptan artık e-posta almamak için golang-tr+...@googlegroups.com adresine e-posta gönderin.
Daha fazla seçenek için https://groups.google.com/d/optout adresini ziyaret edin.



--
roktas

murat ozalp

unread,
Aug 25, 2015, 10:35:40 AM8/25/15
to gola...@googlegroups.com

Anladım sonunda. ;) Allah razı olsun.

--
Sent from Mail.Ru app for Android

Tuesday, 25 August 2015, 04:29PM +0300 from Recai Oktaş <rok...@bil.omu.edu.tr>:

murat ozalp

unread,
Aug 25, 2015, 2:42:48 PM8/25/15
to gola...@googlegroups.com
Denedim, cuk diye çalıştı hocam. Bilmemek ne kötü. İki gündür, anlamadan okuduğum şeyleri deneyerek neden çalışmadığını anlamaya çalışıyordum :) Elleriniz dert görmesin. Çok teşekkür ederim.

25 Ağustos 2015 14:35 tarihinde murat ozalp <cun...@gmail.com> yazdı:

murat ozalp

unread,
Aug 25, 2015, 4:28:37 PM8/25/15
to gola...@googlegroups.com
Bahse konu çalışmayı tamamlayıp blog yazısını yazdım: http://web.bilecik.edu.tr/murat-ozalp/2015/08/25/go-golang-beego-framework-ve-heroku/



25 Ağustos 2015 18:42 tarihinde murat ozalp <cun...@gmail.com> yazdı:
Reply all
Reply to author
Forward
0 new messages