首页 > 解决方案 > Freeze 方法在 Frozen Flask 中遇到文件存在错误

问题描述

有谁知道如何使用冷冻瓶???我需要帮助制作网站并将其托管在 github 上。我在 github 上托管它没有问题,但是我在实际的 freeze() 过程中遇到了问题。它工作了一点,但后来我遇到了 FileExistsError。但我没有任何同名的文件。views.py 路由设置得如此笼统,以至于它需要 state/state-abbreviation/other。

from flask_frozen import Freezer
from flask import Flask
from website import app

freezer = Freezer(app)
app.config.from_pyfile('settings.py') #use this to not delete files after freezing, and move all static files into project directory for GH to see.

if __name__ == '__main__':
    freezer.freeze()
    # app.run(debug=True)
from flask import render_template, Blueprint, url_for

@core.route('/')
def index():
    return render_template("index.html", states=states_array, other=Other_Resources)


@core.route('/state/<state_code>')
def state(state_code=None):
    if state is None:
        raise ValueError('No state given')
    title = states_dict[state_code]
    return render_template('state_home_page.html', title=title, states=states_array, code=state_code, other=Other_Resources)


@core.route('/state/<state_code>/donate')
def state_donate(state_code=None):
    title = states_dict[state_code]
    try:
        data = state_to_category['Donate'][state_code]
    except KeyError:
        data = []
    return render_template('state_donate.html', title=title, states=states_array, data=data, code=state_code, other=Other_Resources)

@core.route('/state/<state_code>/organizations')
def state_org(state_code=None):
    title = states_dict[state_code]
    try:
        data = state_to_category['Organization'][state_code]
    except KeyError:
        data = []
    return render_template('state_org.html', title=title, states=states_array, data=data, code=state_code, other=Other_Resources)

@core.route('/state/<state_code>/blackbusiness')
def state_biz(state_code=None):
    title = states_dict[state_code]
    try:
        data = state_to_category['Business'][state_code]
    except KeyError:
        data = []
    return render_template('state_biz.html', title=title, states=states_array, data=data, code=state_code, other=Other_Resources)

@core.route('/State_list')
def State_list():
    return render_template("state_list.html", states=states_array, other=Other_Resources)

@error_pages.app_errorhandler(404)
def error_404(error):
    return render_template('error_pages/404.html', states=states_array), 404

而且我认为它在冻结 state/ca/ 之后会搞砸,然后尝试冻结 state/ca/donate 等等。

这是我的回购https://github.com/mrodriguez3313/Support-bipoc请检查一下,以便您可以分叉并自己尝试。我有一个分支,我在其中进行了测试,称为 MAR-freezingapp。你可以看到我所做的尝试。Frozen Flask 文档听起来应该“正常工作”,当您运行 .freeze() 方法时,它会在 build/ 文件夹中为您创建静态文件。但是当我跑步时python app.py

这些是我得到的错误

/usr/local/lib/python2.7/dist-packages/flask_frozen/__init__.py:199: MimetypeMismatchWarning: Filename extension of u'NationalOrganizations' (type application/octet-stream) does not match Content-Type: text/html; charset=utf-8
  return set(page.url for page in self.freeze_yield())
/usr/local/lib/python2.7/dist-packages/flask_frozen/__init__.py:199: MimetypeMismatchWarning: Filename extension of u'NationalPetitions' (type application/octet-stream) does not match Content-Type: text/html; charset=utf-8
  return set(page.url for page in self.freeze_yield())
/usr/local/lib/python2.7/dist-packages/flask_frozen/__init__.py:199: MimetypeMismatchWarning: Filename extension of u'NationalDonate' (type application/octet-stream) does not match Content-Type: text/html; charset=utf-8
  return set(page.url for page in self.freeze_yield())
/usr/local/lib/python2.7/dist-packages/flask_frozen/__init__.py:199: MimetypeMismatchWarning: Filename extension of u'State_list' (type application/octet-stream) does not match Content-Type: text/html; charset=utf-8
  return set(page.url for page in self.freeze_yield())
/usr/local/lib/python2.7/dist-packages/flask_frozen/__init__.py:199: MimetypeMismatchWarning: Filename extension of u'ca' (type application/octet-stream) does not match Content-Type: text/html; charset=utf-8
  return set(page.url for page in self.freeze_yield())
/usr/local/lib/python2.7/dist-packages/flask_frozen/__init__.py:199: MimetypeMismatchWarning: Filename extension of u'mn' (type application/octet-stream) does not match Content-Type: text/html; charset=utf-8
  return set(page.url for page in self.freeze_yield())
/usr/local/lib/python2.7/dist-packages/flask_frozen/__init__.py:199: MimetypeMismatchWarning: Filename extension of u'tx' (type application/octet-stream) does not match Content-Type: text/html; charset=utf-8
  return set(page.url for page in self.freeze_yield())
/usr/local/lib/python2.7/dist-packages/flask_frozen/__init__.py:199: MimetypeMismatchWarning: Filename extension of u'ga' (type application/octet-stream) does not match Content-Type: text/html; charset=utf-8
  return set(page.url for page in self.freeze_yield())
/usr/local/lib/python2.7/dist-packages/flask_frozen/__init__.py:199: MimetypeMismatchWarning: Filename extension of u'la' (type application/octet-stream) does not match Content-Type: text/html; charset=utf-8
  return set(page.url for page in self.freeze_yield())
/usr/local/lib/python2.7/dist-packages/flask_frozen/__init__.py:199: MimetypeMismatchWarning: Filename extension of u'donate' (type application/octet-stream) does not match Content-Type: text/html; charset=utf-8
  return set(page.url for page in self.freeze_yield())
Traceback (most recent call last):
  File "app.py", line 9, in <module>
    freezer.freeze()
  File "/usr/local/lib/python2.7/dist-packages/flask_frozen/__init__.py", line 199, in freeze
    return set(page.url for page in self.freeze_yield())
  File "/usr/local/lib/python2.7/dist-packages/flask_frozen/__init__.py", line 199, in <genexpr>
    return set(page.url for page in self.freeze_yield())
  File "/usr/local/lib/python2.7/dist-packages/flask_frozen/__init__.py", line 183, in freeze_yield
    new_filename = self._build_one(url)
  File "/usr/local/lib/python2.7/dist-packages/flask_frozen/__init__.py", line 344, in _build_one
    os.makedirs(dirname)
  File "/usr/lib/python2.7/os.py", line 157, in makedirs
    mkdir(name, mode)
OSError: [Errno 17] File exists: '/c/Users/marco/Documents/Udemy/WebDev/SiteProject/state/ca'

我尝试查看是否可以将 .freeze() 包装在 try/except 中,但它仍然停止。也许我做得不对?我尝试运行 freeze.run(debug=True),但它也只是因相同的错误而中断。我仍然可以使用flask run. 提前感谢您的帮助!

标签: pythonpython-3.xflask

解决方案


我克隆了您的项目,并且在core/views.py. 我的项目遇到了类似的问题,在我的路线中添加斜杠解决了这个问题。更多相关讨论:https ://www.reddit.com/r/flask/comments/335cyi/a_problem_with_frozenflask/

Frozen Flask 也不能保证它在任何情况下都“正常工作”。例如,在文档中,他们提到在某些情况下需要编写 url 生成器。(https://pythonhosted.org/Frozen-Flask/#url-generators),尽管这似乎与您的应用程序无关。


推荐阅读