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 -

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).


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.


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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.