Làm cách nào để triển khai một favicon trên Heroku?


11

Tôi có Hello worldmã sau đây cho ứng dụng Heroku của mình. Cũng trong thư mục gốc của dự án, tôi có một 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)

Khi tôi duyệt đến ứng dụng của mình, tôi không thấy a favicon. Ngoài ra, khi tôi kiểm tra heroku logs, tôi nhận được 404dòng sau :

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 -

Câu trả lời:


6

Tôi vừa tìm thấy nó ngay tại đây: http://flask.pocoo.org/docs/potypes/favicon/

Tôi đã thay đổi từ nó một chút và đây là những gì tôi đã làm:

  1. Trong cây của tôi, tôi lưu trữ biểu tượng như static/images/favicon.ico
  2. Trong HTML, tôi có dòng sau trong <head>:

    <link rel="shortcut icon" href="/webmasters//favicon.ico">
    
  3. Trong ứng dụng Flask của tôi, tôi có trình xử lý URL sau cho /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')
    

    Tại sao image/png? Bởi vì nếu tôi sử dụng image/vnd.microsoft.icon, sau đó tôi duyệt đến http://myapp.heroku.com/favicon.ico, tôi nhận được một hộp thoại tải xuống. image/pngchỉ hiển thị favicon trên trang (ít nhất là trên Chrome).


2

Tôi đặt hình ảnh favicon.ico của mình vào public/thư mục trong ứng dụng rails. Sau đó, tôi đã triển khai lên heroku và phải xóa bộ nhớ cache của trình duyệt trước khi cái mới xuất hiện.


1

Đây là những gì tôi sử dụng:

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

Tôi tin rằng "lối tắt" nên có trong Internet Explorer (mặc dù IE thường sẽ kiểm tra favicon bất kể).

Tuy nhiên, có vẻ như biểu tượng ở sai vị trí. Bạn sẽ có thể truy cập nó thông qua yoursite.com/favicon.ico. Bạn cũng có thể kiểm tra bằng cách xem nguồn trang trong Google Chrome và /favicon.icosẽ là một liên kết được gạch chân - nhấp vào đó để mở vị trí bạn đã chỉ định.

CẬP NHẬT: Bạn có một .htaccesstập tin? Từ những gì bạn đã nói, có vẻ như bạn cần tạo một ngoại lệ cho các tệp hiện có để bỏ qua ứng dụng. Nếu bạn đang sử dụng Apache, bạn sẽ sử dụng một cái gì đó như thế này:

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

Cần có một tương đương cho nền tảng bạn đang sử dụng.


Đây có phải trên Flask? Tôi nghĩ Flask tìm kiếm một tập lệnh xử lý cho mỗi URL GET được gửi tới nó. Tôi vẫn nhận được 404.
Bộ

@Kit Xin lỗi, thành thật mà nói tôi không biết gì về Heroku hoặc Flask. Tôi chỉ cho rằng ứng dụng hoạt động tốt nhưng xuất ra một số HTML không chính xác.
DisgruntledGoat
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.