2017-03-24 7 views
0

Flaskを使用してBlueprintから静的ファイルを提供することはできません。私はこれが何度も尋ねられたが、指示がはっきりしないと感じていることを知っている。また、私はそれを動作させることができませんでした。私は、次のファイル構造を有する:フラスコ - 青写真で静的ファイルを提供するには?

FlaskApp 
    ├──__init__.py # Let's call it OuterInit. 
    └── FlaskApp 
     ├──__init__.py # Let's call it InnerInit. 
     ├── modulo 
     │   └── main.py #My blueprint 
     ├── mongo 
     │   └── otherBlueprint... Still not developed. 
     ├── __pycache__ 
     ├── resources 
     ├── static 
     │   ├── public 
     │   │   └── SomePublicFiles... 
     │   └── R 
     |  └── TheFileIWant.R #I want to serve this file 
     └── templates 
      └── index.html #I serve this template from my Blueprint. (it works) 

OuterInit: このファイルには、単にサービスを開始します。それは私のメインのようなものです。誰かがいい練習だと言いました。

from FlaskApp import app 
app.run() 

InnerInit:このファイル青写真を登録し、アプリを作成します。

from flask import Flask, render_template 
app = Flask(__name__) 
from FlaskApp.modulo.main import map_module 
app.register_blueprint(map_module) 

Main.py:ここで私は、このモジュールのAPIサービスを公開します。

import os 
otherImports... 

static_folder = os.path.join(os.pardir, 'static') 
map_module = Blueprint('map_module', __name__, static_folder=static_folder, static_url_path="/static") 

@map_module.route("/map") 
def map(): 
    return render_template("index.html") 

@map_module.route("/serviceData") 
def serviceData(): 
    r = robjects.r 
    r.source("R/TheFileIWant.R") 
    return "Ok." 

私はindex.htmlファイルを提供することができ、それが実際に多くの動的要素を表示する...しかし、私はrpy2とRのファイルにアクセスすることはできません。私はこれが青写真と関係していると確信しています。なぜなら、青写真を作成する前に(プログラムをよりモジュラ化するために)、それはうまくいったからです。

これは私が 'http://localhost:5000/serviceData'

(flaskEnv) [email protected]:~/Documents/FlaskApp$ python __init__.py 
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) 
/home/python_user/Documents/flaskEnv/local/lib/python3.4/site-packages/rpy2/rinterface/__init__.py:186: RRuntimeWarning: Error in file(filename, "r", encoding = encoding) : 
    cannot open the connection 

    warnings.warn(x, RRuntimeWarning) 
/home/python_user/Documents/flaskEnv/local/lib/python3.4/site-packages/rpy2/rinterface/__init__.py:186: RRuntimeWarning: In addition: 
    warnings.warn(x, RRuntimeWarning) 
/home/python_user/Documents/flaskEnv/local/lib/python3.4/site-packages/rpy2/rinterface/__init__.py:186: RRuntimeWarning: Warning message: 

    warnings.warn(x, RRuntimeWarning) 
/home/python_user/Documents/flaskEnv/local/lib/python3.4/site-packages/rpy2/rinterface/__init__.py:186: RRuntimeWarning: In file(filename, "r", encoding = encoding) : 
    warnings.warn(x, RRuntimeWarning) 
/home/python_user/Documents/flaskEnv/local/lib/python3.4/site-packages/rpy2/rinterface/__init__.py:186: RRuntimeWarning: 

    warnings.warn(x, RRuntimeWarning) 
/home/python_user/Documents/flaskEnv/local/lib/python3.4/site-packages/rpy2/rinterface/__init__.py:186: RRuntimeWarning: cannot open file 'R/rmethod.R': No such file or directory 

    warnings.warn(x, RRuntimeWarning) 
[2017-03-24 01:36:28,320] ERROR in app: Exception on /serviceData [GET] 
Traceback (most recent call last): 
    File "/home/python_user/Documents/flaskEnv/local/lib/python3.4/site-packages/flask/app.py", line 1982, in wsgi_app 
    response = self.full_dispatch_request() 
    File "/home/python_user/Documents/flaskEnv/local/lib/python3.4/site-packages/flask/app.py", line 1614, in full_dispatch_request 
    rv = self.handle_user_exception(e) 
    File "/home/python_user/Documents/flaskEnv/local/lib/python3.4/site-packages/flask/app.py", line 1517, in handle_user_exception 
    reraise(exc_type, exc_value, tb) 
    File "/home/python_user/Documents/flaskEnv/local/lib/python3.4/site-packages/flask/_compat.py", line 33, in reraise 
    raise value 
    File "/home/python_user/Documents/flaskEnv/local/lib/python3.4/site-packages/flask/app.py", line 1612, in full_dispatch_request 
    rv = self.dispatch_request() 
    File "/home/python_user/Documents/flaskEnv/local/lib/python3.4/site-packages/flask/app.py", line 1598, in dispatch_request 
    return self.view_functions[rule.endpoint](**req.view_args) 
    File "/home/python_user/Documents/FlaskApp/FlaskApp/modulo/main.py", line 19, in serviceData 
    r.source("R/rmethod.R") 
    File "/home/python_user/Documents/flaskEnv/local/lib/python3.4/site-packages/rpy2/robjects/functions.py", line 178, in __call__ 
    return super(SignatureTranslatedFunction, self).__call__(*args, **kwargs) 
    File "/home/python_user/Documents/flaskEnv/local/lib/python3.4/site-packages/rpy2/robjects/functions.py", line 106, in __call__ 
    res = super(Function, self).__call__(*new_args, **new_kwargs) 
rpy2.rinterface.RRuntimeError: Error in file(filename, "r", encoding = encoding) : 
    cannot open the connection 
+0

Pythonは、現在のモジュールディレクトリを取得する方法を提供します。それらを代わりに使用してください。 –

+0

さらに説明して解決策を教えてください。私はwebframeworksには非常に新しいので、Flaskでファイルを扱うのは簡単ではありません。 –

+0

[docs](http://flask.pocoo.org/docs/0.12/blueprints/#blueprint-resource-folder)を読んでください。ありがとう。 –

答えて

0

にアクセスしたとき、私は何を得るの問題はRへの通話中にあるされています。これに

@map_module.route("/serviceData") 
def serviceData(): 
r = robjects.r 
r.source("R/TheFileIWant.R") 
return "Ok." 

変更:また

r.source(map_module.root_path + "/R/TheFileIWant.R) 

Rファイルを青写真の下のフォルダに移動します。これは静的なファイルではありません(定義は "Webサーバーによって提供されます")。

関連する問題