问题标签 [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.

0 投票
0 回答
154 浏览

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 上创建工作人员时,它希望我创建另一个应用程序。

谁能给我举个例子来说明所有这些应该如何工作?

非常感谢

0 投票
1 回答
55 浏览

git - 如何在 Digital Ocean 应用程序中添加当前的 git commit hash 作为环境变量

我在 Digital Ocean 上有一个应用程序,我希望能够从应用程序代码中访问当前的 git 提交作为环境变量。通过阅读此帮助页面,看起来我应该能够将变量设置为${COMMIT_HASH},但是当我尝试它只是设置为文字字符串时${COMMIT_HASH}。为什么 Digital Ocean 没有用它构建我的应用程序的提交的实际哈希来替换它?

0 投票
0 回答
20 浏览

django - Django DigitalOcean 应用程序部署

我正在处理一个非常小的应用程序。我已在本地启动并运行所有内容,但无法将其部署到 DigitalOcean Apps。我已经重新阅读了所有的教程,只是无法超越这一点。请参阅下面的错误

ModuleNotFoundError:没有名为“dj_database_url”的模块

所以我在项目中手动创建了静态文件目录,我在本地运行了 python manage.py collectstatic --noinput 命令,它完成了它的工作并将文件放在 STATIC_ROOT 目录中。我也改变了一些东西,模块名称将根据 requirements.txt 的顺序而改变

我真的不知道我能做些什么来解决这个问题。任何帮助将不胜感激。感觉这是一个非常简单的修复,但我不知道它是什么。

0 投票
0 回答
32 浏览

python - 无法使用 fastapi 运行后台任务 - 504:网关超时错误

我正在使用 fastapi 对 ml 模型进行预测。因为单个预测需要超过 2 分钟,所以我使用 fastapi 后台任务将预测作为后台任务运行。现在,当我部署到数字海洋时,我无法运行后台工作人员。我越来越504: Gateway Timeout Error

启动命令

gunicorn.config.py

main.py

我已经worker从组件中添加了数字海洋,即使我仍然处于服务器超时状态。我不确定我是否没有使用 fastapi 实现后台任务,因为我的启动命令是否有问题

0 投票
1 回答
10 浏览

ruby-on-rails - Rails 数字海洋托管应用程序“extract_credentials_provider”:缺少凭据

几周以来,我一直在游泳数字海洋管理应用程序。到目前为止,一切都完美无缺。今天,我使用以下配置在本地环境中成功实现了带 Spaces 的 Active Storage:

存储.yml

生产.rb / 开发.rb

credentials.ymldigital_ocean的配置看起来像这样(在被加密之前)通过EDITOR=VI rails credentials:edit

在本地,一切都像一个魅力,所以我假设它不是关于配置本身,而是更多关于 DO 托管应用程序中的部署阶段。

数字海洋部署:

由于整个 S3/Space 通过相同的 :access_key_id / :secret_access_key 机制在本地完美运行,并且我可以从 localhost 与空间进行交互,我假设这个问题发生在部署期间,因为 rails 无法解密credentials.yml.enc文件,所以我尝试了3件事没有成功:

  1. 在应用程序级别添加RAILS_MASTER_KEY环境变量
  2. 通过在 DO 设置中添加构建命令,在构建阶段添加 master.keyecho "${RAILS_MASTER_KEY}" > config/master.key
  3. 通过在运行命令前添加 master.key 在运行阶段,例如echo "${RAILS_MASTER_KEY}" > config/master.key && rails server -p $PORT -e ${RAILS_ENV:-production}

我已经浏览互联网几个小时了,即使我按照所有步骤操作,我也无法理解为什么它会出错。我注意到的是RAILS_MASTER_KEYEnv var 似乎不可用,因为当我echo $RAILS_MASTER_KEY在控制台中运行时它没有出现,即使它似乎是在 App Spec env vars 中设置的:

任何输入都无限感激

0 投票
0 回答
12 浏览

node.js - node ace build --production, [ error ] "build" command not found 数字海洋应用程序上的错误

尝试使用以下部署命令配置应用程序时:

构建命令 npm run build 运行命令 node build/server.js

抛出以下错误:

如果将构建命令更改为: 构建命令 node ace

没有构建命令。

感谢帮助。

0 投票
0 回答
10 浏览

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?或者我可能以错误的方式配置启动文件。

谢谢您的帮助!

0 投票
0 回答
15 浏览

laravel - Axios 和 NextJS + Sanctum cookie:它正在丢弃 baseURL 并调用错误的域路由

我有一个用 Laravel 和 Sanctum 构建的 API。

前端是用 NextJS 构建的。CORS 和通信运行良好 - 显然,即使使用 POST 请求,我也看不到错误。

登录很顺利,Laravel 为.mydomain.com路径“/”设置了一个 cookie,并且它只是 HTTP。好的。控制台中没有错误。我可以使用 Laravel Sanctum 的 JWT 在 chrome 开发工具中看到 cookie。

好的,所以在提交登录表单并收到带有jwtcookie/token的成功响应后,用户将被重定向到主页。在 NextJS 主页中,我有一个功能可以检查会话在 Laravel API 中是否仍然有效。这个函数在getServerSideProps钩子中运行,也就是 NodeJS。为此,从 NextJS 服务器(NodeJS)向 Laravel API 发出 POST 请求,试图获取有关用户的信息。在这个请求中,cookie 被“转发”到 Laravel。但奇怪的是:请求永远不会到达 Laravel。它正在“命中” NextJS API 路由。而且,当然,该路线在 Next 中不存在。它应该请求 Laravel API。

所以,一步一步:

  1. 用户mydomain.com/login从 NextJS 键入并获取登录页面。
  2. 用户填写并提交表单。React(客户端)使用 Axios 在api.mydomain.com/api/login.
  3. Laravel API 验证表单并jwt在响应中设置一个 cookie:
  1. 在 React 使用 cookie 获得登录响应后jwt,React 代码将用户重定向到mydomain.com/(根 URL)。这是问题的开始。

  2. NextJS 将在服务器端运行/构建主页。在 NextJS 的 SSR 期间,Homepage 使用getServerSidePropsNextJS 中的 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这阻止了请求转到子域。

非常感谢任何帮助。