Як розгорнути фавікон на Heroku?


11

У мене є такий Hello worldкод для мого додатка Heroku. Також у кореневій папці мого проекту я маю 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)

Переглядаючи додаток, я не бачу favicon. Також, коли я перевіряю heroku logs, я отримую такий 404рядок:

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 -

Відповіді:


6

Я щойно знайшов це тут: http://flask.pocoo.org/docs/patterns/favicon/

Я трохи відрізнявся від цього, і ось що я зробив:

  1. У своєму дереві я зберігаю ікону як static/images/favicon.ico
  2. У HTML-коді я маю такий рядок у <head>:

    <link rel="shortcut icon" href="/webmasters//favicon.ico">
    
  3. У моєму додатку Flask у мене є такий обробник 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')
    

    Чому image/png? Тому що якщо я користуюся image/vnd.microsoft.icon, то переглядаю http://myapp.heroku.com/favicon.ico, я отримую діалогове вікно завантаження. image/pngпросто відображає фавікон на сторінці (принаймні на Chrome).


2

Я помістив своє зображення favicon.ico в public/папку в додатку рейки. Тоді я розгорнувся до heroku і довелося очистити кеш браузера, перш ніж з'явиться новий.


1

Ось що я використовую:

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

Я вважаю, що "ярлик" повинен бути там для Internet Explorer (хоча IE зазвичай перевірятиме фавікон незалежно).

Однак це здається, що значок знаходиться в неправильному місці. Ви повинні мати доступ до нього через yoursite.com/favicon.ico. Ви також можете перевірити, переглянувши джерело сторінки в Google Chrome, і /favicon.icoце буде підкреслене посилання - натисніть це, щоб відкрити вказане вами місце.

ОНОВЛЕННЯ: У вас є .htaccessфайл? З того, що ви сказали, здається, що вам потрібно зробити виняток для існуючих файлів, щоб обійти додаток. Якщо ви використовуєте Apache, ви використовуєте щось подібне:

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

Повинен бути еквівалент платформи, яку ви використовуєте.


Це на колбі? Я думаю, що Flask шукає скрипт обробника для кожної URL-адреси GET, надісланої до нього. Я все ще отримую 404.
Кіт

@Kit Вибачте, якщо чесно, я нічого не знаю про Heroku чи Flask. Я просто припустив, що додаток працює нормально, але вивів деякий неправильний HTML-код.
НезадоволенняGoat
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.