我有内置环境的烧瓶应用程序。
./bin/pip show flask | grep Version
Version: 0.10.1
./bin/pip show flask-assets | grep Version
Version: 0.10在src文件夹中,src/setup.py有以下字符串
setup(
name = 'spf',
install_requires = [
'flask',
'flask-assets',
],
entry_points = {
'console_scripts': [
'spf_dev = spf.manage:dev', /* see manage.py dev function */
],
},
}对于生成的bin/spf_dev,我有src/spf/manage.py e.py和以下代码
from flask.ext import assets
from . import env
def init (app):
manager = script.Manager(app)
manager.add_command(
'assets',
assets.ManageAssets(app.assets),
)
return manager
def dev ():
init(env.dev.app).run()对于烧瓶环境初始化,我使用src/spf/env/dev.py
from spf import init
app = init({
'ASSETS_DIR': 'src/spf/static/assets',
'ASSETS_URL': '/assets/',
'SASS_STYLE': 'compressed',
'UGLIFYJS_EXTRA_ARGS': (
'-c',
'--screw-ie8',
),
})并在src/spf/init.py中实现了返回wsgi应用程序的init函数。
import flask
from . import assets
def init (env_config=None):
app = flask.Flask(
'spf',
static_url_path='',
)
app.config.update(evn_config)
app.assets = assets.Assets(app)
return app带有捆绑注册的资产模块src/spf/assets.py
from flask.ext.assets import (
Environment,
Bundle,
)
class Assets (Environment):
def __init__ (self, app):
super(Assets, self).__init__(app)
if 'ASSETS_DIR' in app.config:
self.directory = app.config['ASSETS_DIR']
if 'ASSETS_URL' in app.config:
self.url = app.config['ASSETS_URL']
if 'SASS_STYLE' in app.config:
self.config['sass_style'] = app.config['SASS_STYLE']
if 'UGLIFYJS_EXTRA_ARGS' in app.config:
self.config['UGLIFYJS_EXTRA_ARGS'] = \
app.config['UGLIFYJS_EXTRA_ARGS']
self.register('theme.css', Bundle(
'scss/theme.scss',
filters='scss',
output='theme.css',
))
self.append_path('src/assets')src/assets/scss/theme.scss
@import 'btn-o';src/assets/scss/_btn-o.scss存在,不为空,具有0777访问权限
但当我跑
buildout -c src/buildout.cfg
./bin/spf_dev assets -v build我有错误
Building bundle: theme.css
Failed, error was: sass: subprocess had error: stderr=Error: File to import not found or unreadable: ./btn-o. on line 1 of standard input
Use --trace for backtrace. , stdout=, returncode=65我读过https://github.com/miracle2k/webassets/blob/master/src/webassets/filter/sass.py#L36
,但我不明白;-(为什么在我使用self.append_path(' src/assets ')之后,sass不使用src/assets来解析stdin中的@import指令中的相对路径?
发布于 2015-06-23 10:23:54
您需要在sass过滤器中添加一个加载路径,这样它才能使用3.4.14
sass = get_filter('scss')
sass.load_paths = [os.path.join(app.static_folder, 'scss')]然后,当您注册包时:
self.register('theme.css', Bundle(
'scss/theme.scss',
filters=(sass,),
output='theme.css',
))发布于 2015-06-14 12:28:43
问题出在3.4.14里
解决办法是
sudo gem uninstall sass
sudo gem install sass -v 3.4.13https://stackoverflow.com/questions/30821375
复制相似问题