Bagaimana saya menggunakan favicon di Heroku?

11

Saya memiliki Hello worldkode berikut untuk aplikasi Heroku saya. Juga di folder root proyek saya, saya punya 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)

Ketika saya menjelajah ke aplikasi saya, saya tidak melihat favicon. Juga, ketika saya memeriksa heroku logs, saya mendapatkan 404baris berikut :

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
sumber

Jawaban:

6

Saya baru saja menemukannya di sini: http://flask.pocoo.org/docs/patterns/favicon/

Saya sedikit berbeda dari itu dan inilah yang saya lakukan:

  1. Di pohon saya, saya menyimpan ikon sebagai static/images/favicon.ico
  2. Dalam HTML, saya memiliki baris berikut di <head>:

    <link rel="shortcut icon" href="/webmasters//favicon.ico">
    
  3. Di aplikasi Flask saya, saya memiliki penangan URL berikut untuk /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')
    

    Mengapa image/png? Karena jika saya gunakan image/vnd.microsoft.icon, maka saya telusuri http://myapp.heroku.com/favicon.ico, saya mendapatkan kotak dialog unduhan. image/pngcukup tampilkan favicon di halaman (setidaknya di Chrome).

Kit
sumber
2

Saya meletakkan gambar favicon.ico saya public/di folder saya di aplikasi rel saya. Kemudian saya dikerahkan ke heroku dan harus menghapus cache browser saya sebelum yang baru muncul.

TanookiMario
sumber
1

Inilah yang saya gunakan:

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

Saya percaya "jalan pintas" harus ada di sana untuk Internet Explorer (meskipun IE biasanya akan memeriksa favicon terlepas).

Namun, sepertinya ikonnya ada di lokasi yang salah. Anda harus dapat mengaksesnya melalui yoursite.com/favicon.ico. Anda juga dapat memeriksa dengan melihat sumber halaman di Google Chrome dan /favicon.icoakan menjadi tautan yang digarisbawahi - klik untuk membuka lokasi yang telah Anda tentukan.

UPDATE: Apakah Anda punya .htaccessfile? Dari apa yang Anda katakan, sepertinya Anda perlu membuat pengecualian untuk file yang ada untuk memotong aplikasi. Jika Anda menggunakan Apache Anda akan menggunakan sesuatu seperti ini:

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

Seharusnya ada yang setara untuk platform yang Anda gunakan.

DisgruntledGoat
sumber
Apakah ini di Flask? Saya pikir Flask mencari skrip handler untuk setiap URL yang dikirim ke sana. Saya masih mendapatkan 404.
Kit
@ Biarkan Maaf, sejujurnya saya tidak tahu apa-apa tentang Heroku atau Labu. Saya hanya berasumsi aplikasinya bekerja dengan baik tetapi menghasilkan beberapa HTML yang salah.
DisgruntledGoat