簡體   English   中英

Google Cloud ruby​​部署和ruby-docker

[英]Google cloud ruby deployment and ruby-docker

我試圖將我的Rails項目第一次放在Google雲引擎上,但我遇到了很多麻煩。 我想用一個自定義的運行時app.yaml上傳我的項目(因為我也想用yarn安裝依賴項),但是部署命令失敗,並顯示以下錯誤:

Error Response: [4] Your deployment has failed to become healthy in the allotted time and therefore was rolled back. If you believe this was an error, try adjusting the 'app_start_timeout_sec' setting in the 'readiness_check' section.

PS:該應用程序在本地運行(開發和生產環境)。

我的app.yaml看起來像這樣:

entrypoint: bundle exec rails s -b '0.0.0.0' --port $PORT
env: flex
runtime: custom
env_variables:
  My Environment variables

beta_settings:
  cloud_sql_instances: ekoma-app:us-central1:ekoma-db

readiness_check:
  path: "/_ah/health"
  check_interval_sec: 5
  timeout_sec: 4
  failure_threshold: 2
  success_threshold: 1
  app_start_timeout_sec: 120

我的Dockerfile看起來像這樣:

FROM l.gcr.io/google/ruby:latest

RUN apt-get update -qq && apt-get install apt-transport-https

RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -
RUN echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list

RUN apt-get update -qq && apt-get install -y build-essential libpq-dev imagemagick yarn
WORKDIR /app
COPY Gemfile /app/Gemfile
COPY Gemfile.lock /app/Gemfile.lock
COPY package.json /app/package.json
COPY yarn.lock /app/yarn.lock

RUN gem install pkg-config -v "~> 1.1"
RUN bundle install && npm install

COPY . /app

在使用ruby運行時進行部署時,我意識到生成的dockerfile要復雜得多,並且可能已完成,而google提供了一個生成它的倉庫。 因此,我試圖研究Google共享的ruby-docker公共倉庫,但我不知道如何使用其生成的docker映像,因此解決了我的Dockerfile問題

https://github.com/GoogleCloudPlatform/ruby-docker

有人可以幫我弄清楚我的設置有什么問題以及如何運行這些ruby-docker映像(似乎非常有用!)?

謝謝!

在運行自定義運行時時,不會使用app.yaml中的“入口點”字段。 而是在您的Dockerfile中設置CMD。 例如:

CMD ["bundle", "exec", "rails", "s", "-b", "0.0.0.0", "--port", "8080"]

那可能會使您的應用程序運行。 (請記住,環境變量不是以exec形式插值的,因此我將$PORT替換為硬編碼的端口8080,這是App Engine期望的端口。)

作為備選:

可能會使用在紅寶石泊塢窗回購Ruby運行時的圖像,而不必使用自定義運行時(即你可能不需要編寫自己的Dockerfile),即使你自定義生成步驟喜歡做紗安裝。 runtime: ruby大多數構建過程runtime: ruby是可自定義的,但沒有充分記錄。 如果要嘗試此路徑,則TL; DR為:

  1. 在您的app.yaml使用runtime: ruby ,不要提供您自己的Dockerfile。 (然后恢復entrypoint點。)

  2. 如果要安裝runtime: ruby通常不存在的ubuntu軟件包runtime: ruby ,請在app.yaml runtime_configpackages 例如:

     runtime_config: packages: - libgeos-dev - libproj-dev 
  3. 如果要運行自定義構建步驟,請在runtime_configbuild下的app.yaml列出它們。 它們在捆綁安裝步驟(無法自行修改) 之后在Dockerfile中執行。 例如:

     runtime_config: build: - npm install - bundle exec rake assets:precompile - bundle exec rake setup_my_stuff 

    請注意,默認情況下,如果不提供自定義的構建步驟,那么ruby運行時的行為就好像只有一個構建步驟: bundle exec rake assets:precompile || true bundle exec rake assets:precompile || true 也就是說,默認情況下, runtime: ruby將在App Engine部署期間嘗試編譯您的資產。 如果您確實修改了構建步驟,並且想要保留此行為,請確保在您的自定義構建步驟中包括了該rake任務。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM