gpt4 book ai didi

django - 从 Heroku 上托管的 Django 项目的子目录运行非 Django 命令?

转载 作者:行者123 更新时间:2023-12-04 14:39:27 26 4
gpt4 key购买 nike

我已经在 Heroku 上部署了一个 Django 应用程序。该应用程序本身运行良好。我可以运行诸如 heroku run python project/manage.py syncdbheroku run python project/manage.py shell 之类的命令,效果很好。

我的 Django 项目使用了名为 Scrapy 的 Python 网络抓取库。 Scrapy 带有一个名为 scrapy crawl abc 的命令,它可以帮助我抓取我在 scrapy 应用程序中定义的网站。当我在本地机器上运行诸如 scrapy crawl spidername 之类的 scrapy 命令时,应用程序能够抓取日期并将其复制到我的数据库中。但是,当我在项目目录 heroku run scrapy crawl spidername 的子目录下的 Heroku 上运行相同的命令时,没有任何反应。

我在 Heroku 日志中没有看到任何可以指出我出错的地方:

2012-01-26T15:45:38+00:00 heroku[run.1]: State changed from created to starting
2012-01-26T15:45:43+00:00 app[run.1]: Awaiting client
2012-01-26T15:45:43+00:00 app[run.1]: Starting process with command `project/spiderMainDir scrapy crawl spidername`
2012-01-26T15:45:44+00:00 heroku[run.1]: State changed from starting to up
2012-01-26T15:45:46+00:00 heroku[run.1]: State changed from up to complete
2012-01-26T15:45:46+00:00 heroku[run.1]: Process exited

一些附加信息:

我的 scrapy 应用程序调用 pipelines.py 将抓取的项目保存到数据库中。在 pipelines.py 文件中,这是我为调用 Django 设置而编写的内容,以便我可以导入我的模型并将数据从 scrapy 应用程序保存到数据库。

import os,sys
PROJECT_PATH = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
sys.path.append(PROJECT_PATH)
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'

关于我究竟哪里出错的任何指示?如何在 Heroku 上执行 scrapy 命令,以便我的应用程序可以抓取外部网站并将该数据保存到数据库中。外部命令在 Heroku 中的运行方式不是像 - heroku run command 吗?

最佳答案

我正在回答我自己的问题,因为我发现了问题所在。当我从子目录而不是顶级目录执行命令时,Heroku 出于某种原因无法找到 scrapy

heroku run ... 命令通常从顶级目录运行。对于我使用 scrapy 的项目,我需要转到子目录并从子目录运行 scrapy 命令(这就是 scrapy 的设计方式)。这在 Heroku 中不起作用。因此,我通过键入 heroku run bash 进入 Heroku bash 以查看发生了什么。当我从顶级目录运行 scrapy 命令时,Heroku 识别了该命令,但是当我转到子目录时,它无法识别 scrapy 命令。我想有一些与路径有关的问题。在子目录中,我必须指定 scrapy (~/bin/scrapy crawl spidername) 的完整路径才能执行它。

要运行 scrapy 命令而无需每次都手动进入 Heroku bash,我解决这个问题的方法是创建一个包含以下代码的 shell 脚本并将其放在我的 bin 目录下顶级目录并将更改推送到 Heroku。

bin/scrapy.sh :

#!/usr/bin/env bash 
cd ~/project/spiderSubDirectory
~/bin/scrapy $@

完成后,我可以从本地 bash 执行 $ heroku run scrapy.sh crawl spidername。我想这不是最好的解决方案,但它确实有效。

关于django - 从 Heroku 上托管的 Django 项目的子目录运行非 Django 命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9021180/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com