将使用Firebase的python脚本部署到Heroku

时间:2020-09-26 16:58:56

标签: python firebase heroku

我有一个python脚本,可以用硒抓取网页并将数据发布到Firebase实时数据库。该脚本使用计划库每X小时运行一次。

在不使用Firebase的情况下部署脚本,我没有遇到任何错误。使用Firebase代码部署脚本时,运行heroku logs --tail时收到以下消息:

2020-09-23T18:48:35.044206 + 00:00 heroku [web.1]:进程退出 状态137 2020-09-23T18:48:35.091567 + 00:00 heroku [web.1]:状态 从开始变为崩溃2020-09-24T00:26:53.135632 + 00:00 heroku [web.1]:状态从崩溃更改为开始 2020-09-24T00:27:07.260119 + 00:00 heroku [web.1]:启动过程 命令python scraper.py 2020-09-24T00:28:07.677644 + 00:00 heroku [web.1]:错误R10(引导超时)-> Web进程绑定失败 在启动后60秒内达到$ PORT

在本地,该应用程序可与Firebase正常运行!

脚本:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait as wait
import schedule
import time
import os
import firebase_admin
from firebase_admin import credentials
from firebase_admin import db

cred = credentials.Certificate('secret-file.json')

firebase_admin.initialize_app(cred, {
    'databaseURL' : 'https://a-database-url.com/'
})

# Use Chrome in silent mode
op = webdriver.ChromeOptions()
op.binary_location = os.environ.get("GOOGLE_CHROME_BIN")
op.add_argument("--headless") 
op.add_argument("--no-sandbox") 
op.add_argument("--disable-dev-sh-usage") 


def job():
    PATH = "C:\Program Files (x86)\chromedriver.exe"

    # Heroku driver
    driver = webdriver.Chrome(executable_path= os.environ.get("CHROMEDRIVER_PATH"), chrome_options=op)

    driver.get("https://a-website.com")
    print("Opening the browser")

    try:
        # Magic..

        time.sleep(1)

        # Magic..

        time.sleep(3)

        # More Magic..

        driver.quit()
    except:
        driver.quit()



schedule.every(5).minutes.do(job)

while True:
    schedule.run_pending()
    time.sleep(1) # wait one minute

1 个答案:

答案 0 :(得分:0)

您遇到以下错误:

Web进程在60秒内未能绑定到$ PORT

但是听起来您不打算运行一个Web进程(一个监听HTTP请求的Web进程)。

Heroku上的进程在名为Procfile的文件中定义,该文件位于项目的顶级目录中。您可能只需要一个worker而不是一个web进程,例如

worker: python scraper.py

如果您已经拥有Procfile,则将其从web:更改为worker:,如上所示。如果您没有一个文件,请使用前面的内容创建文件。

相关问题