如何在Heroku上部署收藏夹图标?


11

我的Hello worldHeroku应用程序具有以下代码。同样在项目的根文件夹中,我有一个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 -

Answers:


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应用中,我具有以下网址处理程序 /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,不得不在新浏览器出现之前清除浏览器缓存。


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上吗?我认为Flask为发送给它的每个URL GET寻找一个处理程序脚本。我仍然得到404。
套件

@Kit对不起,老实说,我对Heroku或Flask一无所知。我只是认为该应用程序运行良好,但输出了一些不正确的HTML。
DisgruntledGoat 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.