Как развернуть значок на 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/папку в моем приложении rails. Затем я развернулся на heroku и должен был очистить кеш браузера, прежде чем появился новый.

TanookiMario
источник
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]

Там должен быть эквивалент для платформы, которую вы используете.

DisgruntledGoat
источник
Это на фляге? Я думаю, что Flask ищет скрипт-обработчик для каждого URL-адреса, который ему отправляют. Я все еще получаю 404.
Кит
@Kit Извините, если честно, я ничего не знаю о Героку или Фляске. Я просто предположил, что приложение работает нормально, но вывел неправильный HTML.
Рассерженная шлюха