当前位置: 首页 > 知识库问答 >
问题:

cf run任务是否需要在运行前上载环境/脚本?优雅的方式?

祁绪
2023-03-14

我正在使用云铸造。我需要在应用程序之外运行数据库迁移,以便在需要时以某种方式(cf命令、api调用等)触发迁移。

建议我使用运行任务。经过检查,我的理解是,cf run task是cf空间的“SSH客户端”接口,因为我们甚至可以作为cf任务运行“echo 1”。我在官方的cf CLI文档或一些在线指南中看到这样的示例:cf run task my app“bin/rails db:migrate”--命名我的任务。

但我还是很困惑。我的问题是:

>

  • 铁路环境是否需要手动设置以及如何设置?我知道我们可以通过SSH运行sudo apt install xxx之类的东西,但我认为这在生产中有点奇怪。我们可以用更优雅的方式来做吗,比如cf推送或其他cf任务?

    所以我需要使用flyway db迁移,但我们如何上传脚本(作为文件)或保存。sql文件到CF空间?SSH?

    我在cf空间上进行了测试。我只能运行java,因为它附带了java构建包。所以问题变成了:如何在推送的jar中运行java脚本(与问题2相同的问题)或java类来运行db迁移?

    我是CF的新手,这可能是一个非常愚蠢的问题,但我已经花了几天时间,还没有得到正确的答案。我的临时解决方案是在控制器中公开一个“/db迁移”api。然后在服务中实现db迁移。然后我可以运行cf run-任务APP_NAME-c"curlhttps://xxxxx.xxx.xxx/dbmigration"在需要时触发db迁移。但是我仍然需要在应用程序服务中处理dbname、user、密码等,这不是首选。谢谢。

  • 共有1个答案

    师俊健
    2023-03-14

    建议我使用cf run task。经过检查,我的理解是,cf run task是cf空间的“SSH客户端”接口,因为我们甚至可以将“echo 1”作为cf任务运行。

    这不太正确。任务是附加到应用程序的资源。它会根据用于您的应用程序的液滴触发创建单独的容器,其中您设置的命令将被执行。任务的生命周期是有限的(即它会运行,然后退出),而不是应用程序预计会运行并永远继续运行。

    该任务将在与应用程序配置完全相同的容器中运行,这还包括像应用程序一样设置环境变量和绑定服务。

    1. 轨道环境是否需要手动设置以及如何设置?我知道我们可以通过SSH运行sudo这样的软件来安装xxx,但我认为这在生产中有点奇怪。我们可以用一种更优雅的方式,比如cf推送或其他cf任务吗

    第一步是您需要推送Rails应用程序。当您推送应用程序时,Ruby buildpack将运行并安装运行应用程序所需的所有内容。生成的水滴将可用于运行你的应用程序或其他任务。

    如果您想确保任务在应用程序启动之前运行,这就有点麻烦了,这通常是数据库迁移所需要的。

    您可以这样做:

    1. 运行推送--无启动。这个参数确保你的应用程序不会启动。不幸的是,这也意味着该应用程序尚未启动,因此我们还无法运行任务

    如前所述,您可以从推送应用程序开始。应用程序暂存后,您可以运行可以是任何命令的任务。在您的情况下,您需要指定运行迁移的命令。

    运行命令的当前工作目录将是您的应用程序的根目录(即您的cf推送'd或cf推送-p参数)。

    您只能运行基本映像中存在的或由构建包安装的内容。如果您正在运行Java buildpack,那么Java(特别是JRE)就可以使用。默认情况下,它不在$路径上,但您可以运行<代码>。java buildpack/open\u jdk\u jre/bin/java。

    例如:cf run task my cool app'。java buildpack/open\u jdk\u jre/bin/java-版本“

    如果需要其他工具,那么可以运行多个构建包。例如,如果需要执行Javascript代码,可以使用Node。js构建包运行。还有一个apt构建包,可用于安装通过apt或提供的其他软件包。deb文件。

    请注意,Java构建包必须是列出的最后一个构建包。它只能作为最终构建包使用。

    我推送的jar中有一个java类来运行db迁移?

    如前所述,当前工作目录是推送内容的根目录(对于Java,它是JAR/WAR的根目录)。因此,您可以执行java-cp。通用域名格式。实例Main(主),其中为cp 设置类路径以包括类文件所在的当前目录。如果查看Java buildpack生成的运行应用程序的命令,就会发现类似的情况。它有$PWD/ ,基本相同。

     类似资料:
    • 我试图运行我的Python应用程序使用Python 3虚拟环境,但没有安装Python 3,我的脚本不运行。我做错什么了吗?

    • 问题内容: 这两个块之间会有性能差异吗? 与 两者之间还有其他考虑或建议吗? 问题答案: 好吧,在第二种情况下,编译后的代码可能包含两次强制转换-因此 ,从理论上讲, 它两次执行相同的工作。但是,智能JIT很可能会得出您对相同的值执行相同的强制转换,因此可以缓存结果。但它 是 不得不做的工作至少一次- 毕竟,它需要做出决定是否允许投成功,或抛出异常。 与以往一样,如果您关心性能,则应该测试和分析代

    • 本文向大家介绍Python使用CMD模块更优雅的运行脚本,包括了Python使用CMD模块更优雅的运行脚本的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python使用CMD模块更优雅的运行脚本的方法。分享给大家供大家参考。具体分析如下: 平时由于经常给测试人员调试一些东西,虽然写了一些脚本,感觉还是不方便。 python的cmd模块提供的更优雅的方式,很喜欢。 刚写了一些平时常用的测试

    • 本文向大家介绍写个方法判断当前脚本运行在浏览器还是node环境中相关面试题,主要包含被问及写个方法判断当前脚本运行在浏览器还是node环境中时的应答技巧和注意事项,需要的朋友参考一下

    • 问题内容: 我的计划是将一些现有的Redis密钥存储在散列中,稍后再从Redis Lua脚本中获取并采取行动。我读到,最好的做法是提供调用时脚本中使用的所有键。 我的问题是,运行在运行时没有提供任何键,而是对从脚本 内部 获取的某些键进行操作的脚本是否安全?如果没有,后果是什么,如何避免这一缺点? 我提到在的时候,无法知道特定哈希中的键是什么。我可以在步骤之前的某个步骤中从哈希中获取所有键,然后将

    • 问题内容: 机器人是AWT库的一部分,但它似乎与该库的所有其他部分大不相同。我正在创建一个Swing GUI,它将Swing与Java Native Access(JNA)和Robot混合在一起,以允许Java驱动某些MS Windows / Citrix工作程序。我的直觉是,由于机器人会将事件排队在“平台的本机输入队列”上,所以我最后要做的就是在EDT上运行它,但是另一方面,AWT和Swing库