cf run-task
。经过检查,我的理解是cf run-task是cf空间的&q;SSH客户端&接口,因为我们甚至可以将"echo 1"
作为cf任务运行。我在官方cf CLI文档或一些在线指南上看到的示例显示cf run-task my-app "bin/rails db:migrate" --name my-task
。,但我还是很困惑。我的问题是:,我是CF的新手,这可能是一个非常愚蠢的问题,但我已经花了几天的时间来研究它,还没有得到正确的答案。我的临时解决方案是在控制器中公开一个";/dbMigration&qot;API。然后在服务中实现数据库迁移。然后,我可以在需要时运行cf run-task APP_NAME -c "curl https://xxxxx.xxx.xxx/dbmigration"
来触发数据库迁移。但是我仍然需要在应用程序服务中处理dbname、user、password等,这不是我喜欢的。提前谢谢。,那不太对。任务是附加到应用程序的资源。它会根据应用程序使用的快捷方式触发创建一个单独的容器,您设置的命令将在其中执行。任务应该有有限的生存期(即,它将运行,然后退出),而不是预期将永远运行并继续运行的应用。,任务将在配置为与应用完全相同的容器中运行,这还包括设置环境变量和绑定服务,就像您的应用一样。,第一步是您需要
cf push
您的Rails应用程序。当您cf push
应用程序时,Ruby构建包将运行并安装运行您的应用程序所需的一切。然后,生成的快捷批处理程序将可用于运行您的应用程序或其他任务。,如果要确保任务在应用程序启动之前运行(这通常是您在数据库迁移中需要的),则会稍显棘手。,您可以这样做:,如前所述,您可以从推送您的应用程序开始。在应用程序试运行之后,您可以运行任务,该任务可以是任何命令。在您的情况下,您需要指定运行迁移的命令。,将从中运行命令的当前工作目录将是您的应用程序的根目录(即您cf push
d或cf push
的-p
参数)。,您只能运行base image中存在的内容或已由构建包安装的内容。如果您运行的是Java构建包,您将拥有可用的Java(特别是JRE)。默认情况下不在$路径上,但您可以运行.java-buildpack/open_jdk_jre/bin/java
。,例如:cf run-task my-cool-app '.java-buildpack/open_jdk_jre/bin/java -version'
,如果您需要其他工具,那么您可以运行多个构建包。例如,如果需要执行Javascript代码,可以运行Node.js构建包。还有一个apt-buildpack可用于安装通过APT或.deb
文件提供的其他软件包。,请注意,Java构建包必须是列出的最后一个构建包。它只能作为最终生成包使用。,如前所述,当前工作目录是您推送的根目录(对于Java,它是jar/war的根目录)。因此,您可以执行java -cp . com.example.Main
,其中-cp .
设置类路径以包括您的类文件所在的当前目录。如果您查看Java构建包生成的命令来运行您的应用程序,它将是类似的。有$PWD/.
,基本相同。,这篇关于cf run-task是否需要在运行前上传env/script?优雅的方式?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,