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

אז אחרי כל כך הרבה שעות של מלחמה עם הדבר הזה, אני לא מצליח להעלות את האתר לheroku. מקבל את הדבר הזה:

מישהו שנתקל בזה גם ויכול לעזור?

כן.
תכנס ל activiti ואז בשורה דל ההעלאה תראה מה רשום בלוג

יכולות להיות מלא סיבות בגדול ושם אמור להופיע על מה זה נפל

הכוונה לזה?

אני אמור לראות כאן אם משהו נפל?

כן.

  1. צלם את התיקייה בה הקבצים שלך נמצאים
  2. איך נראה ה־procfile שלך? מה יש בתוכו?

ובתוך Procfile יש: web: gunicorn app:app

אבל ראיתי את זה:

image

כלומר שזה כנראה לא הProcfile

מה יש לך בתוך קובץ ה־app?

from flask import Flask, render_template, request

import requests

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()

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.txt?

הקובץ apiKey.txt נמצא תחת אותה תיקייה עם app.py

וכשאני מריץ את זה עם flask run זה עובד נהדר

אני מבין. השאלה היא האם, נניח, הוא ב־gitignore והעלת את הפרויקט ל־Heroku מתוך GitHub

בדיוק. כך נראה הGitHub שלי:

וב .gitignore יש:

apiKey.txt
.venv/
.venv
.venv

ובHeroku הגדרתי אותו כך:

image

מה מהשלבים פה עשיתי לא בסדר?

האם אתה מבין מה זה אומר Config Vars?

עושה רושם שלא. ראיתי משיחות קודמות שדובר על האפשרות להגדיר משתני סביבה ומצילומי מסך והבנתי מכך שכאן עליי להכניס את ה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”) זה עדיין מעלה לי את השגיאה הזאת.