Jak wdrożyć favicon na Heroku?

11

Mam następujący Hello worldkod dla mojej aplikacji Heroku. Również w folderze głównym mojego projektu mam plik 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)

Gdy przeglądam moją aplikację, nie widzę favicon. Ponadto, gdy sprawdzam, pojawia heroku logssię następujący 404wiersz:

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 -
Zestaw
źródło

Odpowiedzi:

6

Właśnie go znalazłem tutaj: http://flask.pocoo.org/docs/patterns/favicon/

Różniłem się od tego trochę i oto co zrobiłem:

  1. W moim drzewie przechowuję ikonę jako static/images/favicon.ico
  2. W HTML mam następujący wiersz w <head>:

    <link rel="shortcut icon" href="/webmasters//favicon.ico">
    
  3. W mojej aplikacji Flask mam następujący moduł obsługi adresów URL /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')
    

    Dlaczego image/png? Ponieważ jeśli użyję image/vnd.microsoft.icon, a następnie przejdę do http://myapp.heroku.com/favicon.ico, pojawi się okno dialogowe pobierania. image/pngwyświetla tylko favicon na stronie (przynajmniej w Chrome).

Zestaw
źródło
2

Umieszczam obraz favicon.ico w moim public/folderze w aplikacji railsowej. Następnie wdrożyłem do heroku i musiałem wyczyścić pamięć podręczną przeglądarki, zanim pojawiła się nowa.

TanookiMario
źródło
1

Oto czego używam:

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

Uważam, że powinien istnieć „skrót” dla Internet Explorera (chociaż IE zwykle sprawdza favicon niezależnie od tego).

Wygląda jednak na to, że ikona znajduje się w niewłaściwym miejscu. Powinieneś być w stanie uzyskać do niego dostęp za pośrednictwem yoursite.com/favicon.ico. Możesz także sprawdzić, przeglądając źródło strony w Google Chrome i /favicon.icobędzie to podkreślony link - kliknij, aby otworzyć wskazaną lokalizację.

AKTUALIZACJA: Czy masz .htaccessplik? Z tego, co powiedziałeś, wygląda na to, że musisz zrobić wyjątek dla istniejących plików, aby ominąć aplikację. Jeśli używasz Apache, możesz użyć czegoś takiego:

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

Powinien istnieć odpowiednik dla używanej platformy.

DisgruntledGoat
źródło
Czy to jest na Flask? Myślę, że Flask szuka skryptu programu obsługi dla każdego wysłanego do niego adresu URL. Nadal dostaję 404.
Zestaw
@Kit Przepraszamy, szczerze mówiąc, nie wiem nic o Heroku ani Flask. Po prostu założyłem, że aplikacja działa dobrze, ale wygenerowała niepoprawny kod HTML.
DisgruntledGoat