问题标签 [digital-ocean-apps]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
redis - 如何在 DigitalOcean 应用平台上部署 Celery worker
我正在尝试将 celery + redis 添加到托管在 DO App Platform 上的 django 应用程序中。我知道有一个我需要解决的问题记录在这里: https ://www.digitalocean.com/community/questions/is-there-an-issue-with-celery-on-app-platform
我的问题是我什至无法达到这一点。Django celery 和 celery beat 在本地运行良好,即我可以安排和运行后台任务。我使用以下方法启动芹菜工人:
芹菜打工人使用:
我无法弄清楚如何在 DO App 平台上执行此操作。
一些教程只是说您需要在 DO 中创建一个工人。这到底是什么意思?我不需要以某种方式运行这些命令吗?我是否需要另一个虚拟环境,或者工作人员是否会从我的 django 应用程序中使用相同的环境(就像在本地运行时一样)。当我尝试在 DO 上创建工作人员时,它希望我创建另一个应用程序。
谁能给我举个例子来说明所有这些应该如何工作?
非常感谢
git - 如何在 Digital Ocean 应用程序中添加当前的 git commit hash 作为环境变量
我在 Digital Ocean 上有一个应用程序,我希望能够从应用程序代码中访问当前的 git 提交作为环境变量。通过阅读此帮助页面,看起来我应该能够将变量设置为${COMMIT_HASH}
,但是当我尝试它只是设置为文字字符串时${COMMIT_HASH}
。为什么 Digital Ocean 没有用它构建我的应用程序的提交的实际哈希来替换它?
django - Django DigitalOcean 应用程序部署
我正在处理一个非常小的应用程序。我已在本地启动并运行所有内容,但无法将其部署到 DigitalOcean Apps。我已经重新阅读了所有的教程,只是无法超越这一点。请参阅下面的错误
ModuleNotFoundError:没有名为“dj_database_url”的模块
所以我在项目中手动创建了静态文件目录,我在本地运行了 python manage.py collectstatic --noinput 命令,它完成了它的工作并将文件放在 STATIC_ROOT 目录中。我也改变了一些东西,模块名称将根据 requirements.txt 的顺序而改变
我真的不知道我能做些什么来解决这个问题。任何帮助将不胜感激。感觉这是一个非常简单的修复,但我不知道它是什么。
python - 无法使用 fastapi 运行后台任务 - 504:网关超时错误
我正在使用 fastapi 对 ml 模型进行预测。因为单个预测需要超过 2 分钟,所以我使用 fastapi 后台任务将预测作为后台任务运行。现在,当我部署到数字海洋时,我无法运行后台工作人员。我越来越504: Gateway Timeout Error
。
启动命令
gunicorn.config.py
main.py
我已经worker
从组件中添加了数字海洋,即使我仍然处于服务器超时状态。我不确定我是否没有使用 fastapi 实现后台任务,因为我的启动命令是否有问题
ruby-on-rails - Rails 数字海洋托管应用程序“extract_credentials_provider”:缺少凭据
几周以来,我一直在游泳数字海洋管理应用程序。到目前为止,一切都完美无缺。今天,我使用以下配置在本地环境中成功实现了带 Spaces 的 Active Storage:
存储.yml
生产.rb / 开发.rb
credentials.yml中digital_ocean
的配置看起来像这样(在被加密之前)通过EDITOR=VI rails credentials:edit
在本地,一切都像一个魅力,所以我假设它不是关于配置本身,而是更多关于 DO 托管应用程序中的部署阶段。
数字海洋部署:
由于整个 S3/Space 通过相同的 :access_key_id / :secret_access_key 机制在本地完美运行,并且我可以从 localhost 与空间进行交互,我假设这个问题发生在部署期间,因为 rails 无法解密credentials.yml.enc
文件,所以我尝试了3件事没有成功:
- 在应用程序级别添加
RAILS_MASTER_KEY
环境变量 - 通过在 DO 设置中添加构建命令,在构建阶段添加 master.key
echo "${RAILS_MASTER_KEY}" > config/master.key
- 通过在运行命令前添加 master.key 在运行阶段,例如
echo "${RAILS_MASTER_KEY}" > config/master.key && rails server -p $PORT -e ${RAILS_ENV:-production}
我已经浏览互联网几个小时了,即使我按照所有步骤操作,我也无法理解为什么它会出错。我注意到的是RAILS_MASTER_KEY
Env var 似乎不可用,因为当我echo $RAILS_MASTER_KEY
在控制台中运行时它没有出现,即使它似乎是在 App Spec env vars 中设置的:
任何输入都无限感激
node.js - node ace build --production, [ error ] "build" command not found 数字海洋应用程序上的错误
尝试使用以下部署命令配置应用程序时:
构建命令
npm run build
运行命令
node build/server.js
抛出以下错误:
如果将构建命令更改为:
构建命令
node ace
没有构建命令。
感谢帮助。
node.js - 如何远程调试部署在 DigitalOcean 应用平台上的 NodeJS 应用?
我在 Digitalocean 的应用程序平台上部署了一个 NodeJS 应用程序,并将其暴露在myserver.ondigitalocean.app
我的目的是将它与我计算机上的 VSCode 连接并远程运行调试器。
到目前为止,我已经设法告诉 App Platform 使用node --inspect myserver.js
.
NodeJS 以检查模式启动,给我一个 url + UUID(类似于ws://127.0.0.1:9229/unique-UUID-f63b0f33d55e
连接我的调试器。
如您所见,检查员的 URL 指向localhost
哪个很好,但我在尝试将其连接到本地的 VSCode 时遇到问题。
从理论上讲,我应该做的就是将我的 VSCode 配置launch.json
为指向公共 URL 并添加检查员提供的 UUID(基本上是 this ws://myserver.ondigitalocean.app/unique-UUID-f63b0f33d55e
)但它不起作用(我还没有找到有关如何实现这一点的官方 DigitalOcean 文档,所以我假设基于 NodeJS 的文档)
检查官方的NodeJS 远程调试文档,似乎我可以SSH tunnel
对服务器执行一个操作,这样我就可以将 VSCode 调试器用作“本地”,而它实际上是通过隧道访问远程服务器。现在,这种方法的问题是DigitalOcean App Platform 不允许 SSH 访问。
这就是我的launch.json
文件的样子,也许我遗漏了一些东西。
也许 App Platform 没有公开端口 9229 或 WS?或者我可能以错误的方式配置启动文件。
谢谢您的帮助!
laravel - Axios 和 NextJS + Sanctum cookie:它正在丢弃 baseURL 并调用错误的域路由
我有一个用 Laravel 和 Sanctum 构建的 API。
前端是用 NextJS 构建的。CORS 和通信运行良好 - 显然,即使使用 POST 请求,我也看不到错误。
登录很顺利,Laravel 为.mydomain.com
路径“/”设置了一个 cookie,并且它只是 HTTP。好的。控制台中没有错误。我可以使用 Laravel Sanctum 的 JWT 在 chrome 开发工具中看到 cookie。
好的,所以在提交登录表单并收到带有jwt
cookie/token的成功响应后,用户将被重定向到主页。在 NextJS 主页中,我有一个功能可以检查会话在 Laravel API 中是否仍然有效。这个函数在getServerSideProps
钩子中运行,也就是 NodeJS。为此,从 NextJS 服务器(NodeJS)向 Laravel API 发出 POST 请求,试图获取有关用户的信息。在这个请求中,cookie 被“转发”到 Laravel。但奇怪的是:请求永远不会到达 Laravel。它正在“命中” NextJS API 路由。而且,当然,该路线在 Next 中不存在。它应该请求 Laravel API。
所以,一步一步:
- 用户
mydomain.com/login
从 NextJS 键入并获取登录页面。 - 用户填写并提交表单。React(客户端)使用 Axios 在
api.mydomain.com/api/login
. - Laravel API 验证表单并
jwt
在响应中设置一个 cookie:
在 React 使用 cookie 获得登录响应后
jwt
,React 代码将用户重定向到mydomain.com/
(根 URL)。这是问题的开始。NextJS 将在服务器端运行/构建主页。在 NextJS 的 SSR 期间,Homepage 使用
getServerSideProps
NextJS 中的 hook,并尝试调用api.mydomain.com/api/me
以验证 session/cookie/jwt。但是,由于未知原因,它实际上调用了mydomain.com/api/me
. 请注意,我的 API 在子域中运行api.mydomain.com
,NextJS 在mydomain.com
.
看起来 Axios 正在“忽略”baseURL
配置。但我什至用绝对路径、硬编码的子域替换了相对 URL。仍然看到同样的错误。首先,它导致了 404 页面——因为 NextJS 没有/pages/api/me.ts
文件。我花了很长时间才想到:“嘿,也许这个请求会发送给 NextJS 本身,而不是 Laravel API”。因此,我在 NextJS 中放入了一个输出以下句子的文件:
EERRRROOORRRRRR!!!!永远不应该调用这个,因为 LARAVEL 应该响应这个调用,而不是 NEXTJS API !!!!!!
我可以在日志中看到这个响应。这是我的 HTTP 方法:
然后,我可以在 NextJS / Node 日志中看到:
上面日志的最后一行只存在,因为 Axios 在 NextJS SSR 期间调用了错误的域。所以,无论我做什么,请求总是命中mydomain.com/api/me
,而不是api.mydomain.com
. 我在 DigitalOcean Apps 平台上完成所有这些工作。使用控制台,我可以手动运行debug.js
类似的文件node debug.js
,它可以正确获取 URL/有效负载。但是,在 NextJS 中,baseURL
被忽略了,请求总是转到 NextJS。
我不知道我还应该在这里做什么。因为login
路线很好。我不确定是否是因为config.headers.host
这阻止了请求转到子域。
非常感谢任何帮助。