Come faccio a distribuire una favicon su Heroku?


11

Ho il seguente Hello worldcodice per la mia app Heroku. Anche nella cartella principale del mio progetto, ho un 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)

Quando cerco la mia app, non vedo a favicon. Inoltre, quando controllo heroku logs, ottengo la seguente 404riga:

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 -

Risposte:


6

L'ho appena trovato qui: http://flask.pocoo.org/docs/patterns/favicon/

Ho variato un po 'da questo ed ecco cosa ho fatto:

  1. Nel mio albero, memorizzo l'icona come static/images/favicon.ico
  2. In HTML, ho la seguente riga in <head>:

    <link rel="shortcut icon" href="/webmasters//favicon.ico">
    
  3. Nella mia app Flask, ho il seguente gestore URL per /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')
    

    Perché image/png? Perché se uso image/vnd.microsoft.icon, quindi sfoglio http://myapp.heroku.com/favicon.ico, visualizzo una finestra di dialogo per il download. image/pngvisualizza solo la favicon sulla pagina (almeno su Chrome).


2

Ho inserito la mia immagine favicon.ico nella mia public/cartella nell'app Rails. Quindi mi sono schierato su heroku e ho dovuto svuotare la cache del mio browser prima che arrivasse quello nuovo.


1

Ecco cosa uso:

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

Credo che la "scorciatoia" dovrebbe essere lì per Internet Explorer (sebbene IE di solito controlli una favicon indipendentemente).

Tuttavia, sembra che l'icona sia nella posizione sbagliata. Dovresti essere in grado di accedervi tramite yoursite.com/favicon.ico. Puoi anche controllare visualizzando l'origine della pagina in Google Chrome e /favicon.icosarà un link sottolineato: fai clic su di esso per aprire la posizione che hai specificato.

AGGIORNAMENTO: hai un .htaccessfile? Da quello che hai detto, sembra che tu debba fare un'eccezione per i file esistenti per bypassare l'app. Se stai usando Apache useresti qualcosa del genere:

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

Dovrebbe esserci un equivalente per la piattaforma che stai utilizzando.


È su Flask? Penso che Flask cerchi uno script del gestore per ogni URL che gli viene inviato. Ricevo ancora 404.
Kit

@Kit Siamo spiacenti, a dire il vero non so nulla di Heroku o Flask. Ho appena pensato che l'app funzionasse bene, ma ho prodotto un codice HTML errato.
SconcertatoGoat
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.