簡體   English   中英

由於 rails db:migrate,Google Cloud 構建失敗

[英]Google Cloud build fails due to rails db:migrate

我正在按照“在 Cloud Run 環境中運行 Rails”的說明進行操作,但遇到了麻煩。 我使用了他們提供的 github 存儲庫和谷歌雲 shell,我成功地啟動了工作應用程序。

現在,我正在嘗試將 Cloud Run 集成到我的 Rails 模板中。 使用提供的 cloudbuild.yaml 文件“將應用程序部署到 Cloud Run”時,構建在數據庫遷移期間崩潰。 我正在使用 postgreSQL。以下是錯誤詳細信息:

錯誤

"bundle exec rails db:migrate" ->

“ActiveRecord::ConnectionNotEstablished:無法連接到服務器:沒有這樣的文件或目錄”

我想我已經將其追溯到 Google 推薦此主機的 database.yml 文件:

production:
  <<: *default
  database: <%= ENV["PRODUCTION_DB_NAME"] %>
  username: <%= ENV["PRODUCTION_DB_USERNAME"] %>
  password: <%= Rails.application.credentials.gcp[:db_password] %>
  host: "<%= ENV.fetch("DB_SOCKET_DIR") { '/cloudsql' } %>/<%= ENV["CLOUD_SQL_CONNECTION_NAME"] %>"

目前還不清楚這個 ENV.fetch("DB_SOCKET_DIR") 來自哪里[至少對我來說,我是新手]。 他們的 git 存儲庫包含一個文件夾,我在其中找到了另一個構建的模板,其中包括我嘗試集成的app.standard.yamlconfig/database_unix.yml

應用程序標准 yaml:

entrypoint: bundle exec rackup --port $PORT
runtime: ruby27

env_variables:
  SECRET_KEY_BASE: <SECRET_KEY>
  RAILS_ENV: production
  INSTANCE_UNIX_SOCKET: /cloudsql/<PROJECT-ID>:<INSTANCE-REGION>:<INSTANCE-NAME>
  DB_USER: <YOUR_DB_USER_NAME>
  DB_PASS: <YOUR_DB_PASSWORD>
  DB_NAME: <YOUR_DB_NAME>

beta_settings:
  cloud_sql_instances: <PROJECT-ID>:<INSTANCE-REGION>:<INSTANCE-NAME>

數據庫_unix.yml:

# [START cloud_sql_postgres_activerecord_connect_unix]
unix: &unix
  adapter: postgresql
  # Configure additional properties here.
  # [END cloud_sql_postgres_activerecord_connect_unix]
  pool: 5
  timeout: 5000

  # [START cloud_sql_postgres_activerecord_connect_unix]
  # Note: Saving credentials in environment variables is convenient, but not
  # secure - consider a more secure solution such as
  # Cloud Secret Manager (https://cloud.google.com/secret-manager) to help
  # keep secrets safe.
  username: <%= ENV["DB_USER"] %>  # e.g. "my-database-user"
  password: <%= ENV["DB_PASS"] %> # e.g. "my-database-password"
  database: <%= ENV.fetch("DB_NAME") { "vote_development" } %>
  # Specify the Unix socket path as host
  host: "<%= ENV["INSTANCE_UNIX_SOCKET"] %>"
  # [END cloud_sql_postgres_activerecord_connect_unix]

development:
  <<: *unix

# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
  <<: *unix
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 1 } %>
  database: <%= ENV.fetch("DB_NAME") { "vote_test" } %>

production:
  <<: *unix
  database: <%= ENV.fetch("DB_NAME") { "vote_production" } %>

我見過的其他一些解決方案提到了這個而不是主機:

套接字:“/cloudsql/project_id:us-central1:photo-album-production”

我沒有運氣就試過了。 我將存儲庫克隆到我的機器上並重新嘗試了 Cloud Run 指令。 這次沒有成功,因為它遇到了相同的遷移錯誤。 我在想這個錯誤嗎?

檢查一下: https://cloud.google.com/sql/docs/postgres/connect-build

簡而言之,您需要運行 Cloud SQL Auth Proxy 以在 Cloud Build 中創建一個 Unix 套接字,以便您的應用程序可以連接。

如果您使用的是私有 IP 實例,則需要確保您使用的是私有池。

暫無
暫無

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

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