[英]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為:
在您的app.yaml
使用runtime: ruby
,不要提供您自己的Dockerfile。 (然后恢復entrypoint
點。)
如果要安裝runtime: ruby
通常不存在的ubuntu軟件包runtime: ruby
,請在app.yaml
runtime_config
: packages
。 例如:
runtime_config: packages: - libgeos-dev - libproj-dev
如果要運行自定義構建步驟,請在runtime_config
: build
下的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.