【问题标题】:Deploy Ruby on Rails app to App Engine using Cloud Build使用 Cloud Build 将 Ruby on Rails 应用部署到 App Engine
【发布时间】:2018-11-21 14:03:12
【问题描述】:

我正在尝试使用 Cloud Build 自动将 Ruby on Rails 应用部署到 App Engine。

我的app.yaml 看起来像这样,

runtime: ruby
env: flex
entrypoint: bundle exec rails server

但是我收到了这个错误,

Step #1: ERROR: (gcloud.app.deploy) 当前目录下有一个cloudbuild.yaml,/workspace/app.yaml中的runtime字段当前设置为[runtime: ruby​​]。要使用您的 cloudbuild.yaml 构建自定义运行时,请将运行时字段设置为 [runtime: custom]。要继续使用 [ruby] 运行时,请从该目录中删除 cloudbuild.yaml。

然后我尝试将运行时更改为custom 并添加一个 Dockerfile,因为自定义运行时需要一个 Dockerfile。

但现在我收到一条错误消息,

错误:(gcloud.app.deploy)自定义运行时必须在源目录中具有 [Dockerfile] 和 [cloudbuild.yaml] 中的一个; [/home/milindu/Projects/ElePath-Ruby] 两者都包含

然后我也删除了 Dockerfile。但是现在陷入了这种奇怪的情况。你可以看到'Step #1:' 正在成长为几个就像陷入递归一样。

【问题讨论】:

    标签: ruby-on-rails google-app-engine google-cloud-platform google-cloud-build


    【解决方案1】:

    Cloudbuild.yaml 应与 App Engine Flexible 一起使用,而无需使用自定义运行时。如您收到的第一条错误消息中所述,如果您在非自定义运行时中部署,则不能将 app.yaml 和 cloudbuild.yaml 放在同一目录中,要纠正这种情况,请按照下列步骤操作:

    1. 将您的 app.yaml 和其他 ruby​​ 文件移动到子目录中(使用您的 原始app.yaml,无需使用自定义运行时)

    2. 在您的 cloudbuild.yaml 步骤下,修改应用部署的参数 通过添加第三个指定您的 app.yaml 的路径。

    下面是一个例子:

    ==================FROM:
    
    steps: 
    - name: 'gcr.io/cloud-builders/gcloud' 
    args: ['app', 'deploy'] 
    timeout: '1600s' 
    ===================TO:
    
    steps: 
    - name: 'gcr.io/cloud-builders/gcloud' 
    args: ['app', 'deploy', '[SUBDIRECTORY/app.yaml]'] 
    timeout: '1600s' 
    

    【讨论】:

    • 谢谢@David,我试过了,它奏效了。现在的问题是,这是一个开源项目,我不能将所有代码移动到仅用于 Cloud Build 的子目录中。有没有你能想到的解决方法?有没有办法将app.yaml 保留在子目录中并执行此操作或任何其他技巧?
    • 我目前没有适合您的解决方法。但是,这可能通过使用自定义运行时间和 Docker 文件来实现,但我知道这可能并不理想。如果您认为这对您很重要,您可以在 Issue Tracker 上创建一个功能请求,提供一些上下文并提供您的用例。
    猜你喜欢
    • 2015-05-06
    • 2019-02-06
    • 1970-01-01
    • 2020-02-28
    • 1970-01-01
    • 1970-01-01
    • 2020-09-01
    • 2020-11-24
    • 1970-01-01
    相关资源
    最近更新 更多