在Linux上安装heroku cli *无需*root,并且*无自动更新*

问题描述 投票:0回答:1

我是一名计算机科学教授,正在尝试使用 Heroku 教授 Web 应用程序开发(Flask、Rails、SparkJava 等)。

我们的计算环境是一个集中管理的Linux系统,学生和我都没有root权限。学生的文件和磁盘配额也非常有限:200MB 空间和 4000 个单独文件。

我曾经能够为他们提供一种方法,通过破解“独立安装”来让他们访问 Heroku 工具带,从而绕过执行安装的人具有 root 权限的默认假设。

但是它不再起作用了。当我安装到一个目录并从那里运行时,Heroku 工具带不断尝试“自动更新”到每个单独用户的 ~/.local/share 中,并且由于 Heroku-CLI 安装中有超过 12000 个文件( !)这超出了他们的文件配额。 这太疯狂了。我只想安装一次 Heroku toolbelt 客户端,集中更新它,而不是让每个学生都拥有自己的副本。这个要求是否太过分了? 有什么办法可以做到这一点吗?

曾经有一些技巧让客户端认为它已经是最新的,或者通过某种方式将其配置为不进行自动更新。但我找不到怎么做。

(提前感谢您提出的所有好主意,例如:让他们在自己的笔记本电脑上工作、制作虚拟机、让他们在 AWS 上工作等。对于某些平行宇宙来说,这些都是可行的好主意。如果我可以使用任何其他计算环境,我已经这样做了,如果我不能让 Heroku 在这里工作,我就不能在课堂上使用 Heroku,因为这很令人沮丧。它曾经有效。)

截至 2024 年的解决方案

heroku command-line-interface
1个回答
1
投票
<heroku installation folder>/client/<heroku verion>/node_modules/@oclif/plugin-update/lib/update.js

,在

if (autoUpdate)

中查找

async runUpdate(options)
并将下一行替换为
return;
Heroku 安装文件夹在 Mac 上为 
~/.local/share/heroku

以前的解决方案,也许在某些系统上仍然可行

作为一种快速而肮脏的解决方案,您可以

lib/heroku/updater.rb

更改

def self.needs_update? compare_versions(latest_version, latest_local_version) > 0 end

def self.needs_update?
  false
end

您将不会再被更新所困扰。每次您想要手动更新时都必须执行此操作。

更好的更可维护的解决方案是获取一个配置值或类似的东西来控制工具带上游接受的这种行为,该工具带是开源的
https://github.com/heroku/heroku

© www.soinside.com 2019 - 2024. All rights reserved.