2017-08-13 32 views
1

我有打破的那一刻App Engine应用程序我谷歌应用程序引擎dev_appserver.py ioError在进口apache_beam

import apache_beam 

我可以证实的依赖关系的应用程序运行在虚拟环境中安装的。通过评审它下面的堆栈跟踪看起来像是试图访问/ dev/null出于某种原因,并且它失败了。

INFO  2017-08-13 13:03:37,980 stubs.py:50] Sandbox prevented access to file "/home/raul/Downloads/google-cloud-sdk" 
INFO  2017-08-13 13:03:37,980 stubs.py:51] If it is a static file, check that `application_readable: true` is set in your app.yaml 
INFO  2017-08-13 13:03:37,980 stubs.py:50] Sandbox prevented access to file "/home/raul/Downloads/google-cloud-sdk/platform" 
INFO  2017-08-13 13:03:37,980 stubs.py:51] If it is a static file, check that `application_readable: true` is set in your app.yaml 
INFO  2017-08-13 13:03:38,260 stubs.py:50] Sandbox prevented access to file "/dev/null" 
INFO  2017-08-13 13:03:38,260 stubs.py:51] If it is a static file, check that `application_readable: true` is set in your app.yaml 
ERROR 2017-08-13 13:03:38,261 wsgi.py:263] 
Traceback (most recent call last): 
    File "/home/raul/Downloads/google-cloud-sdk/platform/google_appengine/google/appengine/runtime/wsgi.py", line 240, in Handle 
    handler = _config_handle.add_wsgi_middleware(self._LoadHandler()) 
    File "/home/raul/Downloads/google-cloud-sdk/platform/google_appengine/google/appengine/runtime/wsgi.py", line 299, in _LoadHandler 
    handler, path, err = LoadObject(self._handler) 
    File "/home/raul/Downloads/google-cloud-sdk/platform/google_appengine/google/appengine/runtime/wsgi.py", line 85, in LoadObject 
    obj = __import__(path[0]) 
    File "/home/raul/Documents/football/main.py", line 7, in <module> 
    import apache_beam 
    File "/home/raul/Documents/football/env/lib/python2.7/site-packages/apache_beam/__init__.py", line 75, in <module> 
    import apache_beam.internal.pickler 
    File "/home/raul/Documents/football/env/lib/python2.7/site-packages/apache_beam/internal/pickler.py", line 38, in <module> 
    import dill 
    File "/home/raul/Documents/football/env/lib/python2.7/site-packages/dill/__init__.py", line 27, in <module> 
    from .dill import dump, dumps, load, loads, dump_session, load_session, \ 
    File "/home/raul/Documents/football/env/lib/python2.7/site-packages/dill/dill.py", line 165, in <module> 
    FileType = type(open(os.devnull, 'rb', buffering=0)) 
    File "/home/raul/Downloads/google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/python/stubs.py", line 260, in __init__ 
    raise IOError(errno.EACCES, 'file not accessible', filename) 
IOError: [Errno 13] file not accessible: '/dev/null' 

任何想法可能会导致这种情况,以及如何解决它?

+0

你是否在谷歌云或本地环境中部署它?原因是,我也试图添加一个cron来通过appengine运行数据流管道,它会帮助我。 :) – Anuj

+0

由于沙箱限制,我无法首先在开发服务器上运行它,所以我没有部署它。灵活的环境似乎是这种用例的一种方式 –

回答

1

GAE Python sandbox在您的应用程序代码允许执行的操作方面相当严格。它看起来像apache-beam使用的dill包需要访问沙箱上不允许的特殊文件(在这种情况下为/dev/null设备文件)。

您可以更改您的代码以满足所有沙盒要求,也可以尝试使用the flexible environment,这更容忍一些(但它是一个不同的野兽)。见Choosing an App Engine EnvironmentMigrating Services from the Standard Environment to the Flexible Environment。注意:回溯表明你的应用程序试图从本地系统安装执行apache-beam,这也不能在标准环境中工作 - 它需要在你的应用程序中进行销售,请参阅Installing a third-party library