【问题标题】:Azure function apps : [Errno 30] Read-only file systemAzure 函数应用程序:[Errno 30] 只读文件系统
【发布时间】:2020-07-28 00:40:51
【问题描述】:

我正在使用 Azure Function Apps 开发 API。 API 在本地运行良好(使用 localhost)。但是,在发布到 Function App 后,我收到此错误:

[Errno 30] 只读文件系统

此错误发生在我将连接作为函数建立后,每次请求 API 时都允许建立新连接。数据取自 Azure Blob 存储容器。 代码:

DBConnection.py:

import os, uuid
from azure.storage.blob import BlockBlobService, AppendBlobService
from datetime import datetime
import pandas as pd
import dask.dataframe as dd
import logging

def BlobConnection() :

    try:
        print("Connecting...")
        #Establish connection

        container_name = 'somecontainer'
        blob_name = 'some_name.csv'
        file_path = 'somepath'
        account_name = 'XXXXXX'
        account_key = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'

        blobService = BlockBlobService(account_name=account_name, account_key=account_key)


        blobService.get_blob_to_path(container_name, blob_name, file_path)

        df = dd.read_csv(file_path, dtype={'Bearing': 'int64', 'Speed': 'int64'})
        df = df.compute()
        
        return df

    except Exception as ex:
        print('Unable to connect!')
        print('Exception:')
        print(ex)

【问题讨论】:

    标签: python azure azure-functions azure-blob-storage azure-function-app


    【解决方案1】:

    您可能在 Package 或 Zip 中运行。 如果是这样,当您运行代码时,以下行将尝试保存 blob,但无法保存。如果您将其更新为使用 get_blob_to_bytes 或 get_blob_to_stream 就可以了。

    blobService.get_blob_to_path(container_name, blob_name, file_path)
    

    来自 [https://stackoverflow.com/questions/53630773/how-to-disable-read-only-mode-in-azure-function-app] 第 1 部分 - 禁用只读模式

    如果您使用的是最新工具,您可能会发现您的函数应用处于从包运行模式,这意味着它直接从上传的 ZIP 中读取文件,因此无法对其进行编辑。您可以通过删除门户中的 WEBSITE_RUN_FROM_ZIP 或 WEBSITE_RUN_FROM_PACKAGE 应用程序设置来关闭它。请注意,这将在您下次发布之前清除您的函数应用。

    如果您的工具稍旧,或者您使用最新工具部署但使用 func azure functionapp publish my-app-name --nozip,那么您可以使用门户中平台功能中的应用服务编辑器来编辑 function.json 文件并删除“generatedBy”设置,这将阻止它们成为只读文件。

    【讨论】:

    • 您好,WEBSITE_RUN_FROM_ZIP 或 WEBSITE_RUN_FROM_PACKAGE 均不在应用程序设置中。我将 FUNCTION_APP_EDIT_MODE 添加到读写。好像也不行
    • 假设你需要有本地文件。你可以试试 tempfile docs.python.org/3/library/tempfile.html 应该有一个临时位置,然后你可以使用 tempfile.gettempdir() 并将文件存储在那里。
    • 好的,我试试看。
    • 对不起,我在看一些东西。 tempfile.NamedTemporaryFile 看起来是使用 tempfile.NamedTemporaryFile(suffix='.csv', prefix=os.path.basename(file)) 作为 tf 获取信息 stackoverflow.com/questions/51110783/… 的好方法:tf_directory = os.path.dirname(tf.name)
    • 你也检查过这个吗? github.com/manish/dask-azureblobfs 看起来你可以直接从 blob 中读取数据。
    猜你喜欢
    • 2020-07-01
    • 2020-05-19
    • 2018-10-05
    • 2013-06-19
    • 2021-06-19
    • 1970-01-01
    • 1970-01-01
    • 2022-11-23
    • 2021-11-19
    相关资源
    最近更新 更多