Pythonanywhere socketio desteklemiyordu sanırım. Ben de bu yüzden socketio kullandığım bir web sitesini heroku’da deploy etmiştim.
detaylar msn
ya da iletişime geçeblr myz lütfen eğer vaktn varsa
Tabi, olur.
31 Ocak 2019’a ait bir gönderi.
Hi guys,
Does PythonAnywhere work with flask_socketio?
I’m looking at building some simple webapps following Miguel Grinberg’s tutorial on Flask: https://blog.miguelgrinberg.com/post/easy-websockets-with-flask-and-gevent
Is there any work happening behind the scenes that will introduce this feature? If not, what is a suitable alternative to achieve bi-directional communication between a client and the server?
Thanks,
-Karl
Cevap:
Unfortunately we don’t support it right now. We’re planning to introduce support in the future using extensions to the way always-on tasks work, but we don’t have a timeline right now.
For bi-directional communication right now, the best option is to poll an endpoint on your website from JavaScript.
ben nasl deploy edceğime dyom
biraz bilgszm bu konuda
Tamam müsait olduğumda size yardımcı olmaya çalışırım. Şu an pek müsait değilim ama.
Tekrar merhaba, aşağıdaki anlatıyı dikkatlice okumanızı rica ediyorum.
Bir Heroku üyeliğiniz olduğunu varsayarak anlatıyorum. Ayrıca aşağıdaki işlemler Ubuntu’da gerçekleştirilmiştir. Ayrıca sisteminizde git
'in yüklü olması da gerekiyor.
- https://dashboard.heroku.com/apps sayfasına gidince aşağıdaki gibi bir sayfa görmeniz gerekiyor.
- Bu ekranın sağ tarafında yer alan New isimli düğmeye tıklayın, sonra da açılan menüden Create new app seçeneğine tıklayın.
- Karşınıza aşağıdaki gibi bir ekranın gelmesi gerekiyor.
Bu sayfada yer alan App name kısmına, oluşturacağınız web sitenizin ismini yazın. Choose a region kısmından da bölgeyi Europe olarak seçin. Sonra da Create app düğmesine tıklayın.
- Karşınıza aşağıdaki gibi bir sayfanın gelmesi gerekiyor:
Bu sayfada yer alan, Deploy using Heroku Git kısmında önerilen metodları uygulayacağız. Ama şimdilik buna bir ara verelim. Deploy edeceğimiz ve SocketIO kullanılacak olan siteyi tasarlayalım.
-
HOME
dizinindedildeolupbiten
isimli bir klasör oluşturuyorum. Ve bu klasörün içinde bir tane sanal ortam oluşturacağım, sanal ortamı etkinleştireceğim vepip
,setuptools
vewheel
paketlerini güncelleyeceğim.
mkdir dildeolupbiten
cd dildeolupbiten
python3.8 -m venv venv
source venv/bin/activate
pip3 install --upgrade pip setuptools wheel
- Şimdi, bu sanal ortama gerekli kütüphaneleri kuralım:
pip3 install flask flask_socketio eventlet greenlet gunicorn aiohttp
- Şimdi de uygulamamızı oluşturalım. Bu uygulama, kendisine bağlanan istemcinin gönderdiği mesajı istemciye geri gönderen bir socket uygulaması olacak. Siz tabi uygulamayı dilediğiniz gibi değiştirebilir, geliştirebilirsiniz.
Kodlar:
from flask import Flask
from flask_socketio import SocketIO, send
app = Flask(__name__)
app.config["SECRET_KEY"] = "secret!"
socketio = SocketIO(app)
@socketio.on('message')
def receive(message):
send(message)
- Şimdi sıra geldi, deploy etme işleminde kullanılacak dosyaları oluşturmaya. Öncelikle
venv
'e kurulmuş olan kütüphaneler için birrequirements.txt
dosyası oluşturmamız gerekiyor.
python3 -m pip freeze > requirements.txt
Oluşan requirements.txt
dosyasında şu modüllerin yer aldığını göreceksiniz:
aiohttp==3.6.2
async-timeout==3.0.1
attrs==20.2.0
chardet==3.0.4
click==7.1.2
dnspython==1.16.0
eventlet==0.28.0
Flask==1.1.2
Flask-SocketIO==4.3.1
greenlet==0.4.17
gunicorn==20.0.4
idna==2.10
itsdangerous==1.1.0
Jinja2==2.11.2
MarkupSafe==1.1.1
monotonic==1.5
multidict==4.7.6
pkg-resources==0.0.0
python-engineio==3.13.2
python-socketio==4.6.0
six==1.15.0
Werkzeug==1.0.1
yarl==1.6.0
Bu listeden pkg-resources==0.0.0
satırını silin. Daha önce o paket yüzünden hata almıştım. Oluşan requirements.txt
dosyasını app.py
'nin yanına koyun.
- Web uygulamasının nasıl deploy edileceğini belirlemek için
Procfile
isimli, uzantısız bir dosya oluşturmamız gerekiyor. İçine de aşağıdakileri yazıyoruz.
web: gunicorn --worker-class eventlet -w 1 app:app
Klasörümüzün şöyle bir ağaç görünümü olmalı:
.
├── app.py
├── Procfile
└── requirements.txt
-
https://devcenter.heroku.com/articles/heroku-cli sayfasında yer alan Heroku CLI programını bilgisayarımıza indiriyoruz.
-
app.py
'nin yer aldığı dizinde Terminal’i açıyorum. Ve şunları yazıyorum:
heroku login -i
Sizden mail adresinizi ve şifrenizi girmeniz istenecektir. Sonra da sırayla aşağıdaki komutları çalıştırın:
heroku git:remote -a dildeolupbiten
git init
git add *
git commit -m "first commit"
git push heroku master
-
Kısa bir süre deploy işleminin bitmesini beklemeniz gerekecek. Deploy işleminde hata almadığınızdan eminseniz, web siteniz artık yayındadır.
-
Test etmek için bir tane istemci oluşturalım ve deploy ettiğimiz web sitesine bağlanmaya çalışalım. Bilgisayarınızda
python-socketio
kütüphanesinin kurulu olduğundan emin olun.
python3 -m pip install python-socketio
Kodlar:
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import socketio
sio = socketio.Client()
info = None
@sio.event
def message(data):
global info
info = data
@sio.event
def disconnect():
sio.disconnect()
sio.connect('https://dildeolupbiten.herokuapp.com')
sio.emit("message", data=b"hello", callback=disconnect)
sio.wait()
print(info)
Socket sunucunuz doğru çalışıyorsa, sunucunun size b"Hello"
byte verisini geri göndermesi ve ekranınıza bu verinin yazdırılmış olması gerekiyor.
Not: https://dildeolupbiten.herokuapp.com az önce deploy edilmiştir. İsteyen arkadaşlar son paylaştığım kodları çalıştırarak, web sitesine gönderdikleri mesajı geri alıp almadıklarını test edebilirler.
Not: URL’ye web tarayıcısını kullanarak bağlanmaya çalışırsanız, 404 hatası alırsınız. Çünkü gösterilebilecek herhangi bir sayfa eklemedim.
5.adımı anlamadm gerisi ok ayrıca şimdiden teşekkürler
Aşağıdaki komut, dildeolupbiten
isimli bir klasör oluşturur.
mkdir dildeolupbiten
Aşağıdaki komut ile dildeolupbiten
dizinine gideriz.
cd dildeolupbiten
Aşağıdaki komut ile venv
isminde, yorumlayıcısı python3.8 olan bir tane sanal ortam oluştururuz.
python3.8 -m venv venv
Aşağıdaki komut ile oluşturduğumuz sanal ortamı etkinleştiririz.
source venv/bin/activate
Aşağıdaki komut ile de pip
, setuptools
ve wheel
paketlerini güncelleriz.
pip3 install --upgrade pip setuptools wheel
bunları kendi terminalimden mi yapyom
Evet, bilgisayarınızdaki terminali kullanarak yapacaksınız.
souce tanmlı değil diyor
windowstan ubuntuya mı geçmelym
Windows’ta venv
'i etkinleştirme yöntemi biraz daha farklı. activate.bat
dosyasını çalıştırmanız gerekiyor. Şöyle etkinleştiriliyordu herhalde:
venv/Scripts/activate.bat
olmadı ama daha da yorulma
bi şekilde ubuntudan yaparm
ayrıca çok teşekkür ederm yoksa napardm
Ya, activate
ya da activate.bat
'ı çalıştırmanız lazım. Zor bir şey değil.
Gerçi burda da benim söylediğimin aynısı tarif ediliyor, bir şeyi eksik yapıyor olabilir misiniz? Mesela virtualenv
yüklenmemiş olabilir mi?
tutorial-env\Scripts\activate.bat
öle gözükyo çünkü sistem belirtilen yolu bulamyor dyor
Tamam o zaman şu komut ile yükleyin önce, sonra işlemleri baştan yapın.
pip install virtualenv
Eğer Ubuntu’ya venv
yüklemek isterseniz, şöyle yükleyin:
sudo apt-get install python3-venv
aynı hata instaya geçsek olmaz mı tabii vaktn boşsa
belirtilen yol bulunamadı
Instagram hesabım yok.
Aynı hata nedir? pip
ile yüklediniz mi? Bir hata alıyorsanız, hatanın çıktısını ya metin olarak, ya da ekran görüntüsü olarak paylaşın size zahmet. Bir de hangi adımları izlediniz, onları da bir liste şeklinde paylaşırsanız, hata almanıza sebep olan kısımları daha rahat bulabiliriz.
pip ile yükledm ardından
tutorial-env\Scripts\activate.bat
bu yazıyı yazınca sistem belirtilen yolu bulamadı diyor
Sizin, tutorial-env
isminde bir klasörünüz var mı?
pip
ile yükledikten sonra, bir tane sanal ortam oluşturmalısınız.
Örneğin:
python -m venv myvenv
Sonra da myvenv/Scripts
içindeki activate.bat
dosyasını çalıştırmalısınız.
myvenv/Scripts/activate.bat