Wie stelle ich ein Favicon auf Heroku bereit?

11

Ich habe den folgenden Hello worldCode für meine Heroku-App. Auch im Stammordner meines Projekts habe ich eine favicon.ico.

import os
from flask import Flask
app = Flask(__name__)

html = '''
<!doctype html>
<html>
  <head>
    <link rel="shortcut icon" href="/webmasters//favicon.ico">
    <title>Hello world!</title>
  </head>
  <body>
    <p>Hello world!</p>
  </body>
</html>
'''

@app.route('/')
def index():
    return html

if __name__ == '__main__':
    port = int(os.environ.get('PORT', 5000))
    app.run(host='0.0.0.0', port=port)

Wenn ich zu meiner App navigiere, sehe ich keine favicon. Wenn ich nachschaue heroku logs, erhalte ich außerdem die folgende 404Zeile:

2012-02-14T05:23:29+00:00 app[web.1]: <ip.ad.dr.es> - - [14/Feb/2012 05:23:29] "GET /favicon.ico HTTP/1.1" 404 -
Kit
quelle

Antworten:

6

Ich habe es gerade hier gefunden: http://flask.pocoo.org/docs/patterns/favicon/

Ich habe mich ein bisschen davon unterschieden und hier ist, was ich getan habe:

  1. In meinem Baum speichere ich das Symbol als static/images/favicon.ico
  2. Im HTML habe ich die folgende Zeile im <head>:

    <link rel="shortcut icon" href="/webmasters//favicon.ico">
    
  3. In meiner Flask-App habe ich den folgenden URL-Handler für /favicon.ico

    @app.route('/favicon.ico')
    def favicon():
        return send_from_directory(os.path.join(app.root_path, 'static', 'images'),
                                   'favicon.ico', mimetype='image/png')
    

    Warum image/png? Denn wenn ich benutze image/vnd.microsoft.icon, dann navigiere ich zu http://myapp.heroku.com/favicon.ico, bekomme ich ein Download-Dialogfeld. image/pngZeigt nur das Favicon auf der Seite an (zumindest in Chrome).

Kit
quelle
2

Ich habe mein favicon.ico- Bild in meinem public/Ordner in meiner Rails-App abgelegt . Dann stellte ich Heroku bereit und musste meinen Browser-Cache leeren, bevor der neue auftauchte.

TanookiMario
quelle
1

Folgendes benutze ich:

<link rel="shortcut icon" type="image/x-icon" href="/webmasters//favicon.ico">

Ich glaube, die "Verknüpfung" sollte für Internet Explorer vorhanden sein (obwohl der IE normalerweise unabhängig davon nach einem Favicon sucht).

Es hört sich jedoch so an, als ob sich das Symbol an der falschen Stelle befindet. Sie sollten über darauf zugreifen können yoursite.com/favicon.ico. Sie können dies auch überprüfen, indem Sie die Seitenquelle in Google Chrome anzeigen. Dies /favicon.icoist ein unterstrichener Link. Klicken Sie darauf, um den von Ihnen angegebenen Speicherort zu öffnen.

UPDATE: Hast du eine .htaccessDatei? Nach dem, was Sie gesagt haben, müssen Sie eine Ausnahme für vorhandene Dateien machen, um die App zu umgehen. Wenn Sie Apache verwenden, verwenden Sie Folgendes:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule your_rule_here [L]

Für die von Ihnen verwendete Plattform sollte ein Äquivalent vorhanden sein.

DisgruntledGoat
quelle
Ist das auf Flask? Ich denke, Flask sucht nach einem Handler-Skript für jede URL, die an ihn gesendet wird. Ich bekomme immer noch 404er.
Kit
@ Kit Sorry, um ehrlich zu sein, ich weiß nichts über Heroku oder Flask. Ich habe nur angenommen, dass die App gut funktioniert, aber etwas falsches HTML ausgegeben.
DisgruntledGoat