![](/img/trans.png)
[英]Google Cloud Run for Django, Cloud Build fails for psycop2-binary
[英]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.yaml和config/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.