![](/img/trans.png)
[英]How to query a (Postgres) RDS DB through an AWS Jupyter Notebook?
[英]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-user 、 healthd和webapp 。 我沒有進入這些文件夾的權限。 是否可以在 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.log
和cfn-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.