Como implanto um favicon no Heroku?

11

Eu tenho o seguinte Hello worldcódigo para o meu aplicativo Heroku. Também na pasta raiz do meu projeto, eu tenho um 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)

Quando navego para o meu aplicativo, não vejo a favicon. Além disso, quando eu verifico heroku logs, recebo a seguinte 404linha:

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 -
Kit
fonte

Respostas:

6

Eu encontrei aqui: http://flask.pocoo.org/docs/patterns/favicon/

Eu variava um pouco e aqui está o que eu fiz:

  1. Na minha árvore, guardo o ícone como static/images/favicon.ico
  2. No HTML, tenho a seguinte linha no <head>:

    <link rel="shortcut icon" href="/webmasters//favicon.ico">
    
  3. No meu aplicativo Flask, tenho o seguinte manipulador de URL para /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')
    

    Por que image/png? Porque, se eu usar image/vnd.microsoft.icone procurar http://myapp.heroku.com/favicon.ico, recebo uma caixa de diálogo de download. image/pngapenas exibe o favicon na página (pelo menos no Chrome).

Kit
fonte
2

Coloquei minha imagem favicon.ico na minha public/pasta no meu aplicativo de trilhos. Então implantei no heroku e tive que limpar o cache do navegador antes que o novo aparecesse.

TanookiMario
fonte
1

Aqui está o que eu uso:

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

Eu acredito que o "atalho" deve estar lá para o Internet Explorer (embora o IE geralmente verifique se há um favicon independentemente).

No entanto, parece que o ícone está no local errado. Você deve poder acessá-lo via yoursite.com/favicon.ico. Você também pode verificar visualizando a fonte da página no Google Chrome e /favicon.icoserá um link sublinhado - clique nele para abrir o local que você especificou.

UPDATE: Você tem um .htaccessarquivo? Pelo que você disse, parece que você precisa abrir uma exceção para que os arquivos existentes ignorem o aplicativo. Se você estiver usando o Apache, usaria algo como isto:

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

Deve haver um equivalente para a plataforma que você está usando.

DisgruntledGoat
fonte
Isso está no Flask? Acho que o Flask procura um script manipulador para cada URL GET enviado a ele. Eu ainda tenho 404.
Kit
@Kit Desculpe, para ser sincero, não sei nada sobre Heroku ou Flask. Apenas assumi que o aplicativo funcionava bem, mas gerava algum HTML incorreto.
DiscruntledGoat