Comment déployer un favicon sur Heroku?

11

J'ai le Hello worldcode suivant pour mon application Heroku. Toujours dans le dossier racine de mon projet, j'ai un fichier 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)

Lorsque je navigue vers mon application, je ne vois pas de favicon. De plus, lorsque je vérifie heroku logs, j'obtiens la 404ligne suivante :

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 -
Trousse
la source

Réponses:

6

Je viens de le trouver ici: http://flask.pocoo.org/docs/patterns/favicon/

J'ai un peu varié et voici ce que j'ai fait:

  1. Dans mon arbre, je stocke l'icône sous static/images/favicon.ico
  2. Dans le HTML, j'ai la ligne suivante dans le <head>:

    <link rel="shortcut icon" href="/webmasters//favicon.ico">
    
  3. Dans mon application Flask, j'ai le gestionnaire d'URL suivant pour /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')
    

    Pourquoi image/png? Parce que si j'utilise image/vnd.microsoft.icon, je navigue jusqu'à http://myapp.heroku.com/favicon.ico, j'obtiens une boîte de dialogue de téléchargement. image/pngaffiche simplement le favicon sur la page (au moins sur Chrome).

Trousse
la source
2

J'ai mis mon image favicon.ico dans mon public/dossier dans mon application rails. Ensuite, je me suis déployé sur Heroku et j'ai dû vider le cache de mon navigateur avant que le nouveau n'apparaisse.

TanookiMario
la source
1

Voici ce que j'utilise:

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

Je crois que le "raccourci" devrait être là pour Internet Explorer (bien qu'IE vérifie généralement un favicon malgré tout).

Cependant, il semble que l'icône soit au mauvais endroit. Vous devriez pouvoir y accéder via yoursite.com/favicon.ico. Vous pouvez également vérifier en affichant la source de la page dans Google Chrome et /favicon.icosera un lien souligné - cliquez dessus pour ouvrir l'emplacement que vous avez spécifié.

MISE À JOUR: Avez-vous un .htaccessfichier? D'après ce que vous avez dit, il semble que vous devez faire une exception pour que les fichiers existants contournent l'application. Si vous utilisez Apache, vous utiliseriez quelque chose comme ceci:

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

Il devrait y avoir un équivalent pour la plate-forme que vous utilisez.

Chèvre mécontente
la source
Est-ce sur Flask? Je pense que Flask recherche un script de gestionnaire pour chaque URL GET qui lui est envoyée. Je reçois toujours des 404.
Kit
@Kit Désolé, pour être honnête, je ne sais rien sur Heroku ou Flask. J'ai supposé que l'application fonctionnait bien, mais j'ai sorti un code HTML incorrect.
DisgruntledGoat