使用 gspread API client_secret.json 从 Git 存储库部署 Flask 应用程序

Deploy Flask application from Git repository with gspread API client_secret.json

我想在 heroku 上部署一个 flask 应用程序,在 flask 应用程序中我使用 Google Sheets API 和 gspread。要进行身份验证,您会得到一个 client_secret.json 文件,您需要将其插入到 ServiceAccountCredentials.from_json_keyfile_name()。当你这样做时,我将 json 文件中的所有变量保存为环境变量,并像这样获取它们:

def create_keyfile_dict():
    variables_keys = {
        "type": os.environ.get("SHEET_TYPE"),
        "project_id": os.environ.get("SHEET_PROJECT_ID"),
        "private_key_id": os.environ.get("SHEET_PRIVATE_KEY_ID"),
        "private_key": os.environ.get("SHEET_PRIVATE_KEY"),
        "client_email": os.environ.get("SHEET_CLIENT_EMAIL"),
        "client_id": os.environ.get("SHEET_CLIENT_ID"),
        "auth_uri": os.environ.get("SHEET_AUTH_URI"),
        "token_uri": os.environ.get("SHEET_TOKEN_URI"),
        "auth_provider_x509_cert_url": os.environ.get("SHEET_AUTH_PROVIDER_X509_CERT_URL"),
        "client_x509_cert_url": os.environ.get("SHEET_CLIENT_X509_CERT_URL")
    }
    return variables_keys

scope = ['https://spreadsheets.google.com/feeds','https://www.googleapis.com/auth/spreadsheets',"https://www.googleapis.com/auth/drive.file","https://www.googleapis.com/auth/drive"]
creds = ServiceAccountCredentials.from_json_keyfile_name(create_keyfile_dict(), scope)

但后来我得到了错误:

    with open(filename, 'r') as file_obj:
FileNotFoundError: [Errno 2] No such file or directory: 'client_secret'

因为 gspread 想要一个文件,而不是我的函数 returns 的字典。 所以问题或多或少(如果没有更好的方法)我应该如何将环境变量获取到一个只在 heroku 而不是 GitHub 上并且可以被 gspread 读取的文件。

与其使用 ServiceAccountCredentials 附带的方法来读取 google 发送给您的 JSON 凭据文件,您可以使用以下方法:

https://oauth2client.readthedocs.io/en/latest/source/oauth2client.service_account.html#oauth2client.service_account.ServiceAccountCredentials.from_json_keyfile_dict