כישלון בהעלאה לheroku

תגיות:

עושה רושם שלא. ראיתי משיחות קודמות שדובר על האפשרות להגדיר משתני סביבה ומצילומי מסך והבנתי מכך שכאן עליי להכניס את הapiKey שלי

עושה רושם שכן :slight_smile: זה בדיוק המקום להגדיר משתני סביבה.

שנינו מסכימים ש־apiKey.txt לא קיים בתוך ה־GitHub שלך.
כלומר, ב־Heroku ששואב את הקבצים מ־GitHub אין apiKey.txt.
בקוד שלך אתה מבקש לקרוא קובץ שנקרא apiKey.txt.

מצליח לראות איפה הבעיה?

אני מצליח. רק כדי שאהיה בטוח, הכוונה היא שעליי להכניס משתנה רנדומלי ב app.py, להעלות את הדף כך לgithub, וכשהוא מגיע לheroku, להגדיר כך בצורה חיצונית את הערך של apiKey?

גם אם זה יעבוד פה באתר של heroku זה לא יעבוד כשאנסה להריץ את האתר מעצמי דרך ה flask run

לא רנדומלי – ב־app.py אתה פשוט צריך לקרוא משתנה סביבה עם שם לבחירתך.
כפי ש־Heroku שלך מוגדר כרגע, לפי צילומי המסך שלך, השם של משתנה הסביבה ממנו תשאב את הערך צריך להיות apiKey.
את זה אתה צריך להעלות ל־GitHub, כן.

אני מצטער אני לא מבין. השם שלו יהיה apiKey כן, אבל כשאגדיר אותו אצטרך לתת לו ערך. ואם אני לא אמור לשים שם את המפתח האמיתי ולא ערך רנדומלי, מה צריך להיות שם? יש פונקציה שיודעת לקבל את הערך מהשרתים של heroku?

גם כשאני עושה את זה בצורה הזאת (במקום לקרוא את הקובץ שלא קיים אני כותב apiKey = “The API Key”) זה עדיין מעלה לי את השגיאה הזאת.

הי אז שיניתי את זה למשתני הסביבה וזה רץ סבבה בflask, והעברתי לgithub והעליתי שוב לheroku ועדיין זה לא מוכן להעלות את האתר כמו שצריך ואני מקבל את התגובה הזאת:

יש לך אולי עוד רעיון לסיבה אפשרית?

  1. מה כתוב ב־log?
  2. איך נראית עכשיו app.py?
  3. מה עוד ניסית לעשות?

-----> Python app detected
-----> Installing python-3.6.12
-----> Installing pip 20.1.1, setuptools 47.1.1 and wheel 0.34.2
-----> Installing SQLite3
-----> Installing requirements with pip
Collecting certifi==2020.6.20
Downloading certifi-2020.6.20-py2.py3-none-any.whl (156 kB)
Collecting chardet==3.0.4
Downloading chardet-3.0.4-py2.py3-none-any.whl (133 kB)
Collecting click==7.1.2
Downloading click-7.1.2-py2.py3-none-any.whl (82 kB)
Collecting Flask==1.1.2
Downloading Flask-1.1.2-py2.py3-none-any.whl (94 kB)
Collecting idna==2.10
Downloading idna-2.10-py2.py3-none-any.whl (58 kB)
Collecting itsdangerous==1.1.0
Downloading itsdangerous-1.1.0-py2.py3-none-any.whl (16 kB)
Collecting Jinja2==2.11.2
Downloading Jinja2-2.11.2-py2.py3-none-any.whl (125 kB)
Collecting MarkupSafe==1.1.1
Downloading MarkupSafe-1.1.1-cp36-cp36m-manylinux1_x86_64.whl (27 kB)
Collecting requests==2.24.0
Downloading requests-2.24.0-py2.py3-none-any.whl (61 kB)
Collecting urllib3==1.25.11
Downloading urllib3-1.25.11-py2.py3-none-any.whl (127 kB)
Collecting Werkzeug==1.0.1
Downloading Werkzeug-1.0.1-py2.py3-none-any.whl (298 kB)
Installing collected packages: certifi, chardet, click, Werkzeug, itsdangerous, MarkupSafe, Jinja2, Flask, idna, urllib3, requests
Successfully installed Flask-1.1.2 Jinja2-2.11.2 MarkupSafe-1.1.1 Werkzeug-1.0.1 certifi-2020.6.20 chardet-3.0.4 click-7.1.2 idna-2.10 itsdangerous-1.1.0 requests-2.24.0 urllib3-1.25.11
-----> Discovering process types
Procfile declares types -> web
-----> Compressing…
Done: 51.3M
-----> Launching…
Released v4
https://find-your-movie123.herokuapp.com/ deployed to Heroku

from flask import Flask, render_template, request

import requests

import os

app = Flask(name)

@app.route(’/’)

def main():

name = request.args.get("name")

year = request.args.get("year")

if not name:

    return render_template('index.html', movies={})

url = "http://www.omdbapi.com"

#with open('apiKey.txt') as file:

    #apiKey = file.read()

apiKey = os.getenv("API_KEY")

params = {'apikey': apiKey, 's': name}

try:

    params['y'] = int(year)

except ValueError:

    pass

resp = requests.get(url, params=params)

try:

    resp_json = resp.json()

except ValueError:

    return render_template('index.html', movies={})

return render_template('index.html', movies=resp_json.get('Search', {}))

@app.route(’/search’)

def search_by_title():

id = request.args.__getattribute__("choice")

url = "http://www.omdbapi.com"

with open('apiKey.txt') as file:

    apiKey = file.read()

params = {'apikey': apiKey, 't': id}

resp = requests.get(url, params=params)

resp_json = resp.json()

return render_template('index.html', chosen_movie=resp_json)

@app.route(’/view_image/<image_name>’)

def search_by_image(image_name):

url = "http://www.omdbapi.com"

with open('apiKey.txt') as file:

    apiKey = file.read()

params = {'apikey': apiKey, 't': image_name, 'plot': 'full'}

resp = requests.get(url, params=params)

resp_json = resp.json()

return render_template('index.html', chosen_movie=resp_json)

עדיין יש לך מקומות בהם אתה מנסה לקרוא את הקובץ apiKey.

לא, אני שמתי אותם בהערה, זה לא העתיק את זה לפה משום מה.

  1. ניסיתי לכתוב heroku logs ב cmd וזה נתן לי ערכים שאני לא מבין:

ניסיתי לגגל את זה ובאופן כללי אני בדף שלהם אבל זה לא עובד.

אחר כך הקלדתי heroku logs --tail וקיבלתי את כל אלה:

ראיתי שהרבה הערות התייחסו לfavicon.ico אז שמתי את השורה בה הוא מופיע בהערה ועדיין אני מקבל אותו בתור error בlogs

הורדתי את favicon.ico מכל מקום אפשרי ואיכשהו אני עדיין מקבל אותו בהערות שלי

הוא לא מופיע בגיט האב וידאתי את זה

אתה צריך להכניס דגל אחרי הפעולה, למשל:
heroku logs -app YOUR_APP_NAME

גם לי היו לא מעט תקלות שהיו נראות לא קשורות (כולל ה-favicon שזה לא תקלה בעייתית להבנתי), גללתי למעלה קצת בlogs וראיתי שגיאת פייתון בודדה וקטנה שגרמה לאפליקציה לקרוס…

גם לך זה הראה את זה בהתחלה?

לא, אצלי זה זיהה את האפליקציה…

אולי משהו לא בסדר עם gunicorn, הוא בוודאות בrequirements?

האמת שזה עובד לי עם -a במקום app אבל עדיין זה מחזיר לי את אותו הלוג ממוקדם, עם הfavicon.ico, למרות שאני לא מצליח להבין מאיפה הוא מביא אותו אם מחקתי אותו לחלוטין

הבעיה שלי הייתה שלא שמתי את הgunicorn בrequirements.txt
סוף כל סוף האתר עובד!!!

לייק 1