簡體   English   中英

如何通過 eb cli (django postgres) 遷移 AWS RDS 數據庫?

[英]How can I migrate AWS RDS database through eb cli (django postgres)?

我有一個使用彈性 beanstalk CLI 部署的 django 項目。 我添加了一個 postgres 數據庫(AWS RDS),連接正在運行。

我的數據庫仍然是空的。 如何在 eb shell 中運行遷移命令或“python manage.py createsuperuser”?

當我打開eb ssh <env>並嘗試ls時,沒有顯示任何內容。 使用cd..退回一個目錄,然后ls再次顯示ec2-userhealthdwebapp 我沒有進入這些文件夾的權限。 是否可以在 eb ssh 內部運行 python 命令?

我也嘗試過容器命令 .ebextensions/db-migrate.config:

container_commands:
  01_makemigrations:
    command: "python manage.py makemigrations"
    leader_only: true
  02_migrate:
    command: "python manage.py migrate --first main initial && python manage.py migrate"
    leader_only: true
option_settings:
  aws:elasticbeanstalk:application:environment:
    DJANGO_SETTINGS_MODULE: <app>.settings

使用eb deploy再次提交和部署后,我收到此錯誤:

eb deploy 創建應用程序版本存檔“app-xxxx”。 上傳:[############################################## ###] 100% 完成...

2021-02-22 12:57:12 INFO 環境更新開始。

2021-02-22 12:58:05 INFO 將新版本部署到實例。

2021-02-22 12:58:21 INFO 實例部署成功生成了“Procfile”。

2021-02-22 12:58:23 錯誤實例部署失敗。 有關詳細信息,請參閱“eb-engine.log”。

2021-02-22 12:58:24 錯誤 [實例:i-xxxx] 命令在實例上失敗。 返回碼:1 Output:引擎執行遇到錯誤..

2021-02-22 12:58:24 INFO 命令執行已在所有實例上完成。 摘要:[成功:0,失敗:1]。

2021-02-22 12:58:24 錯誤在實例 ID“i-xxxx”上執行命令不成功。 中止操作。

2021-02-22 12:58:24 錯誤無法部署應用程序。

錯誤:ServiceError - 無法部署應用程序。

為什么命令失敗? 任何建議表示贊賞。 順便說一句,我使用本地 sql 數據庫部署沒有問題。

更新:

eb-engine.log 將我引向 cfn-init.log。 這是 output:

2021-02-22 16:49:43,624 [錯誤] 命令 01_makemigrations (python manage.py makemigrations) 失敗

2021-02-22 16:49:43,624 [錯誤] 在構建 postbuild_0_django_test 期間遇到錯誤:命令 01_makemigrations 失敗

回溯(最后一次調用):文件“/usr/lib/python2.7/site-packages/cfnbootstrap/construction.py”,第 542 行,在 run_config CloudFormationCarpenter(config, self._auth_config).build(worklog)

文件“/usr/lib/python2.7/site-packages/cfnbootstrap/construction.py”,第 260 行,在 build changes['commands'] = CommandTool().apply(self._config.commands)

文件“/usr/lib/python2.7/site-packages/cfnbootstrap/command_tool.py”,第 117 行,在 apply raise ToolError(u"Command %s failed" % name) ToolError: Command 01_makemigrations failed

在路徑中,我看到 python 2.7(?)但實際上 Python 3.7 正在 64 位 Amazon Linux 2 上運行。我也嘗試使用“python3”執行命令。

問題是此時未加載 django。

解決方案:

container_commands:
  01_migrate:
    command: |
      source $PYTHONPATH/activate
      pipenv run python ./manage.py migrate

將您引至eb-engine.logcfn-init.log ,但我在cfn-init-cmd.log中找到了最終提示:

2021-02-23 11:08:34,019 P5022 [INFO] ImportError:無法導入 Django。 您確定它已安裝並在您的 PYTHONPATH 環境變量中可用嗎? 您是否忘記激活虛擬環境?

我也為“createsuperuser”嘗試過。 完全沒有錯誤,也沒有創建新用戶。 沒有用於輸入用戶名/密碼的活動命令行。 如果我找到了 createsuperuser 的解決方案,我會嘗試更新我的答案。

我可以提出另一種方法:

與其從 eb shell 中運行 Django 管理命令,不如調整本地 Django 項目的DATABASE 設置到遠程數據庫,然后執行管理命令。

這對於運行臨時命令(例如createsuperuser )很有用,但對於例行維護命令(例如migrate ),您需要在部署過程中堅持使用container_commands方法。

最后,如果您決定運行createsuperuser ,特別是在 eb shell 中,那么您可以使用container_commands以非交互方式執行此操作,並配置一些額外的設置。 來自Django 文檔

當以交互方式運行時,此命令將提示輸入新超級用戶帳戶的密碼。 當以非交互方式運行時,您可以通過設置 DJANGO_SUPERUSER_PASSWORD 環境變量來提供密碼。 否則,將不會設置密碼,並且超級用戶帳戶將無法登錄,直到手動為其設置密碼。

在非交互模式下,USERNAME_FIELD 和必填字段(列在 REQUIRED_FIELDS 中)回退到 DJANGO_SUPERUSER_<uppercase_field_name> 環境變量,除非它們被命令行參數覆蓋。 例如,要提供 email 字段,您可以使用 DJANGO_SUPERUSER_EMAIL 環境變量。

暫無
暫無

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

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