¿Cómo despliegue un favicon en Heroku?

11

Tengo el siguiente Hello worldcódigo para mi aplicación Heroku. También en la carpeta raíz de mi proyecto, tengo 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)

Cuando busco mi aplicación, no veo a favicon. Además, cuando verifico heroku logs, obtengo la siguiente 404línea:

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 -
Equipo
fuente

Respuestas:

6

Lo encontré aquí: http://flask.pocoo.org/docs/patterns/favicon/

Varié un poco y esto es lo que hice:

  1. En mi árbol, almaceno el ícono como static/images/favicon.ico
  2. En el HTML, tengo la siguiente línea en <head>:

    <link rel="shortcut icon" href="/webmasters//favicon.ico">
    
  3. En mi aplicación Flask, tengo el siguiente controlador de URL para /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')
    

    ¿Por qué image/png? Porque si uso image/vnd.microsoft.icon, entonces busco http://myapp.heroku.com/favicon.ico, aparece un cuadro de diálogo de descarga. image/pngsolo muestra el favicon en la página (al menos en Chrome).

Equipo
fuente
2

Puse mi imagen favicon.ico en mi public/carpeta en mi aplicación de rieles. Luego me desplegué en heroku y tuve que borrar el caché de mi navegador antes de que apareciera el nuevo.

TanookiMario
fuente
1

Esto es lo que uso:

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

Creo que el "acceso directo" debería estar ahí para Internet Explorer (aunque IE generalmente buscará un favicon de todos modos).

Sin embargo, parece que el icono está en la ubicación incorrecta. Debería poder acceder a través de yoursite.com/favicon.ico. También puede verificar viendo la fuente de la página en Google Chrome y /favicon.icoaparecerá un enlace subrayado: haga clic para abrir la ubicación que ha especificado.

ACTUALIZACIÓN: ¿Tienes un .htaccessarchivo? Por lo que ha dicho, parece que necesita hacer una excepción para que los archivos existentes omitan la aplicación. Si está usando Apache, usaría algo como esto:

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

Debe haber un equivalente para la plataforma que está utilizando.

Cabra descontento
fuente
¿Está esto en el matraz? Creo que Flask busca un script de controlador para cada URL que GET le envía. Todavía consigo 404's.
Kit
@ Kit Perdón, para ser honesto, no sé nada sobre Heroku o Flask. Supuse que la aplicación funcionaba bien, pero generaba HTML incorrecto.
DisgruntledGoat