app-generator / sample-docker-django-mysql

Docker Sample - Django & MySql | AppSeed
https://appseed.us/product/material-kit/django/
Other
2 stars 2 forks source link

Migrate fails #3

Closed TerminatedProcess closed 1 year ago

TerminatedProcess commented 1 year ago

I can build with Docker-compose up --build. Going to the website with localhost:5085 throws an error.

image

I then tried to uncomment the python manage.py migrate command in the docker-composed.yml file. Rebuilt and build failed.

I then commented the line again and tried to build. Built successfully, but website fails. So I setup a virtual environment and did the migrate command manually. I get a failure.

`(appseed-docker-mysql-py3.9) mryan ~/pythondev/appseed-docker-mysql $python manage.py migrate Traceback (most recent call last): File "/home/mryan/pythondev/appseed-docker-mysql/.venv/lib/python3.9/site-packages/django/db/backends/base/base.py", line 219, in ensure_connection self.connect() File "/home/mryan/pythondev/appseed-docker-mysql/.venv/lib/python3.9/site-packages/django/utils/asyncio.py", line 33, in inner return func(*args, kwargs) File "/home/mryan/pythondev/appseed-docker-mysql/.venv/lib/python3.9/site-packages/django/db/backends/base/base.py", line 200, in connect self.connection = self.get_new_connection(conn_params) File "/home/mryan/pythondev/appseed-docker-mysql/.venv/lib/python3.9/site-packages/django/utils/asyncio.py", line 33, in inner return func(args, kwargs) File "/home/mryan/pythondev/appseed-docker-mysql/.venv/lib/python3.9/site-packages/django/db/backends/mysql/base.py", line 234, in get_new_connection connection = Database.connect(conn_params) File "/home/mryan/pythondev/appseed-docker-mysql/.venv/lib/python3.9/site-packages/MySQLdb/init.py", line 123, in Connect return Connection(args, kwargs) File "/home/mryan/pythondev/appseed-docker-mysql/.venv/lib/python3.9/site-packages/MySQLdb/connections.py", line 185, in init super().init(*args, **kwargs2) MySQLdb.OperationalError: (2005, "Unknown MySQL server host 'mysql_db' (-5)")

The above exception was the direct cause of the following exception:

Traceback (most recent call last): File "/home/mryan/pythondev/appseed-docker-mysql/manage.py", line 22, in main() File "/home/mryan/pythondev/appseed-docker-mysql/manage.py", line 19, in main execute_from_command_line(sys.argv) File "/home/mryan/pythondev/appseed-docker-mysql/.venv/lib/python3.9/site-packages/django/core/management/init.py", line 419, in execute_from_command_line utility.execute() File "/home/mryan/pythondev/appseed-docker-mysql/.venv/lib/python3.9/site-packages/django/core/management/init.py", line 413, in execute self.fetch_command(subcommand).run_from_argv(self.argv) File "/home/mryan/pythondev/appseed-docker-mysql/.venv/lib/python3.9/site-packages/django/core/management/base.py", line 354, in run_from_argv self.execute(*args, cmd_options) File "/home/mryan/pythondev/appseed-docker-mysql/.venv/lib/python3.9/site-packages/django/core/management/base.py", line 398, in execute output = self.handle(*args, *options) File "/home/mryan/pythondev/appseed-docker-mysql/.venv/lib/python3.9/site-packages/django/core/management/base.py", line 89, in wrapped res = handle_func(args, kwargs) File "/home/mryan/pythondev/appseed-docker-mysql/.venv/lib/python3.9/site-packages/django/core/management/commands/migrate.py", line 75, in handle self.check(databases=[database]) File "/home/mryan/pythondev/appseed-docker-mysql/.venv/lib/python3.9/site-packages/django/core/management/base.py", line 419, in check all_issues = checks.run_checks( File "/home/mryan/pythondev/appseed-docker-mysql/.venv/lib/python3.9/site-packages/django/core/checks/registry.py", line 76, in run_checks new_errors = check(app_configs=app_configs, databases=databases) File "/home/mryan/pythondev/appseed-docker-mysql/.venv/lib/python3.9/site-packages/django/core/checks/database.py", line 13, in check_database_backends issues.extend(conn.validation.check(kwargs)) File "/home/mryan/pythondev/appseed-docker-mysql/.venv/lib/python3.9/site-packages/django/db/backends/mysql/validation.py", line 9, in check issues.extend(self._check_sql_mode(kwargs)) File "/home/mryan/pythondev/appseed-docker-mysql/.venv/lib/python3.9/site-packages/django/db/backends/mysql/validation.py", line 13, in _check_sql_mode if not (self.connection.sql_mode & {'STRICT_TRANS_TABLES', 'STRICT_ALL_TABLES'}): File "/home/mryan/pythondev/appseed-docker-mysql/.venv/lib/python3.9/site-packages/django/utils/functional.py", line 48, in get res = instance.dict[self.name] = self.func(instance) File "/home/mryan/pythondev/appseed-docker-mysql/.venv/lib/python3.9/site-packages/django/db/backends/mysql/base.py", line 405, in sql_mode sql_mode = self.mysql_server_data['sql_mode'] File "/home/mryan/pythondev/appseed-docker-mysql/.venv/lib/python3.9/site-packages/django/utils/functional.py", line 48, in get res = instance.dict[self.name] = self.func(instance) File "/home/mryan/pythondev/appseed-docker-mysql/.venv/lib/python3.9/site-packages/django/db/backends/mysql/base.py", line 366, in mysql_server_data with self.temporary_connection() as cursor: File "/home/mryan/.pyenv/versions/3.9.14/lib/python3.9/contextlib.py", line 119, in enter return next(self.gen) File "/home/mryan/pythondev/appseed-docker-mysql/.venv/lib/python3.9/site-packages/django/db/backends/base/base.py", line 603, in temporary_connection with self.cursor() as cursor: File "/home/mryan/pythondev/appseed-docker-mysql/.venv/lib/python3.9/site-packages/django/utils/asyncio.py", line 33, in inner return func(*args, kwargs) File "/home/mryan/pythondev/appseed-docker-mysql/.venv/lib/python3.9/site-packages/django/db/backends/base/base.py", line 259, in cursor return self._cursor() File "/home/mryan/pythondev/appseed-docker-mysql/.venv/lib/python3.9/site-packages/django/db/backends/base/base.py", line 235, in _cursor self.ensure_connection() File "/home/mryan/pythondev/appseed-docker-mysql/.venv/lib/python3.9/site-packages/django/utils/asyncio.py", line 33, in inner return func(*args, *kwargs) File "/home/mryan/pythondev/appseed-docker-mysql/.venv/lib/python3.9/site-packages/django/db/backends/base/base.py", line 219, in ensure_connection self.connect() File "/home/mryan/pythondev/appseed-docker-mysql/.venv/lib/python3.9/site-packages/django/db/utils.py", line 90, in exit raise dj_exc_value.with_traceback(traceback) from exc_value File "/home/mryan/pythondev/appseed-docker-mysql/.venv/lib/python3.9/site-packages/django/db/backends/base/base.py", line 219, in ensure_connection self.connect() File "/home/mryan/pythondev/appseed-docker-mysql/.venv/lib/python3.9/site-packages/django/utils/asyncio.py", line 33, in inner return func(args, kwargs) File "/home/mryan/pythondev/appseed-docker-mysql/.venv/lib/python3.9/site-packages/django/db/backends/base/base.py", line 200, in connect self.connection = self.get_new_connection(conn_params) File "/home/mryan/pythondev/appseed-docker-mysql/.venv/lib/python3.9/site-packages/django/utils/asyncio.py", line 33, in inner return func(args, kwargs) File "/home/mryan/pythondev/appseed-docker-mysql/.venv/lib/python3.9/site-packages/django/db/backends/mysql/base.py", line 234, in get_new_connection connection = Database.connect(conn_params) File "/home/mryan/pythondev/appseed-docker-mysql/.venv/lib/python3.9/site-packages/MySQLdb/init.py", line 123, in Connect return Connection(args, *kwargs) File "/home/mryan/pythondev/appseed-docker-mysql/.venv/lib/python3.9/site-packages/MySQLdb/connections.py", line 185, in init super().init(args, **kwargs2) django.db.utils.OperationalError: (2005, "Unknown MySQL server host 'mysql_db' (-5)")`

TerminatedProcess commented 1 year ago

.env file (as downloaded)

`(appseed-docker-mysql-py3.9) mryan ~/pythondev/appseed-docker-mysql $cat .env

True for development, False for production

DEBUG=True

Deployment SERVER address

SERVER=.appseed.us

Used for CDN (in production)

No Slash at the end

ASSETS_ROOT=/static/assets

DB_ENGINE=mysql DB_USERNAME=root DB_PASS=root DB_HOST=mysql_db (appseed-docker-mysql-py3.9) mryan ~/pythondev/appseed-docker-mysql`

TerminatedProcess commented 1 year ago

Uncommented migrate command in Dockerfile.. Results:

` [+] Building 10.9s (11/11) FINISHED => [internal] load build definition from Dockerfile 0.1s => => transferring dockerfile: 507B 0.0s => [internal] load .dockerignore 0.1s => => transferring context: 2B 0.0s => [internal] load metadata for docker.io/library/python:3.9 2.1s => [1/7] FROM docker.io/library/python:3.9@sha256:c1613835d7be322f98603f356b9e0c9d40f9589e94dc9f710e714a807a665700 0.1s => => resolve docker.io/library/python:3.9@sha256:c1613835d7be322f98603f356b9e0c9d40f9589e94dc9f710e714a807a665700 0.1s => [internal] load build context 0.4s => => transferring context: 956.38kB 0.4s => CACHED [2/7] WORKDIR /usr/src/app 0.0s => CACHED [3/7] COPY requirements.txt . 0.0s => CACHED [4/7] RUN pip install --upgrade pip 0.0s => CACHED [5/7] RUN pip install --no-cache-dir -r requirements.txt 0.0s => [6/7] COPY . . 1.2s => ERROR [7/7] RUN python manage.py migrate 6.8s

[7/7] RUN python manage.py migrate:

0 6.745 Traceback (most recent call last):

0 6.745 File "/usr/local/lib/python3.9/site-packages/django/db/backends/base/base.py", line 219, in ensure_connection

0 6.745 self.connect()

0 6.745 File "/usr/local/lib/python3.9/site-packages/django/utils/asyncio.py", line 33, in inner

0 6.745 return func(*args, **kwargs)

0 6.745 File "/usr/local/lib/python3.9/site-packages/django/db/backends/base/base.py", line 200, in connect

0 6.746 self.connection = self.get_new_connection(conn_params)

0 6.746 File "/usr/local/lib/python3.9/site-packages/django/utils/asyncio.py", line 33, in inner

0 6.746 return func(*args, **kwargs)

0 6.746 File "/usr/local/lib/python3.9/site-packages/django/db/backends/mysql/base.py", line 234, in get_new_connection

0 6.746 connection = Database.connect(**conn_params)

0 6.746 File "/usr/local/lib/python3.9/site-packages/MySQLdb/init.py", line 123, in Connect

0 6.746 return Connection(*args, **kwargs)

0 6.746 File "/usr/local/lib/python3.9/site-packages/MySQLdb/connections.py", line 185, in init

0 6.746 super().init(*args, **kwargs2)

0 6.746 MySQLdb.OperationalError: (2005, "Unknown MySQL server host 'mysql_db' (-2)")

0 6.746

0 6.746 The above exception was the direct cause of the following exception:

0 6.746

0 6.746 Traceback (most recent call last):

0 6.747 File "/usr/src/app/manage.py", line 22, in

0 6.747 main()

0 6.747 File "/usr/src/app/manage.py", line 19, in main

0 6.747 execute_from_command_line(sys.argv)

0 6.747 File "/usr/local/lib/python3.9/site-packages/django/core/management/init.py", line 419, in execute_from_command_line

0 6.747 utility.execute()

0 6.747 File "/usr/local/lib/python3.9/site-packages/django/core/management/init.py", line 413, in execute

0 6.747 self.fetch_command(subcommand).run_from_argv(self.argv)

0 6.747 File "/usr/local/lib/python3.9/site-packages/django/core/management/base.py", line 354, in run_from_argv

0 6.748 self.execute(*args, **cmd_options)

0 6.748 File "/usr/local/lib/python3.9/site-packages/django/core/management/base.py", line 398, in execute

0 6.748 output = self.handle(*args, **options)

0 6.748 File "/usr/local/lib/python3.9/site-packages/django/core/management/base.py", line 89, in wrapped

0 6.748 res = handle_func(*args, **kwargs)

0 6.748 File "/usr/local/lib/python3.9/site-packages/django/core/management/commands/migrate.py", line 75, in handle

0 6.748 self.check(databases=[database])

0 6.748 File "/usr/local/lib/python3.9/site-packages/django/core/management/base.py", line 419, in check

0 6.748 all_issues = checks.run_checks(

0 6.748 File "/usr/local/lib/python3.9/site-packages/django/core/checks/registry.py", line 76, in run_checks

0 6.748 new_errors = check(app_configs=app_configs, databases=databases)

0 6.748 File "/usr/local/lib/python3.9/site-packages/django/core/checks/database.py", line 13, in check_database_backends

0 6.748 issues.extend(conn.validation.check(**kwargs))

0 6.748 File "/usr/local/lib/python3.9/site-packages/django/db/backends/mysql/validation.py", line 9, in check

0 6.749 issues.extend(self._check_sql_mode(**kwargs))

0 6.749 File "/usr/local/lib/python3.9/site-packages/django/db/backends/mysql/validation.py", line 13, in _check_sql_mode

0 6.749 if not (self.connection.sql_mode & {'STRICT_TRANS_TABLES', 'STRICT_ALL_TABLES'}):

0 6.749 File "/usr/local/lib/python3.9/site-packages/django/utils/functional.py", line 48, in get

0 6.749 res = instance.dict[self.name] = self.func(instance)

0 6.749 File "/usr/local/lib/python3.9/site-packages/django/db/backends/mysql/base.py", line 405, in sql_mode

0 6.749 sql_mode = self.mysql_server_data['sql_mode']

0 6.749 File "/usr/local/lib/python3.9/site-packages/django/utils/functional.py", line 48, in get

0 6.749 res = instance.dict[self.name] = self.func(instance)

0 6.749 File "/usr/local/lib/python3.9/site-packages/django/db/backends/mysql/base.py", line 366, in mysql_server_data

0 6.749 with self.temporary_connection() as cursor:

0 6.749 File "/usr/local/lib/python3.9/contextlib.py", line 119, in enter

0 6.749 return next(self.gen)

0 6.749 File "/usr/local/lib/python3.9/site-packages/django/db/backends/base/base.py", line 603, in temporary_connection

0 6.750 with self.cursor() as cursor:

0 6.750 File "/usr/local/lib/python3.9/site-packages/django/utils/asyncio.py", line 33, in inner

0 6.750 return func(*args, **kwargs)

0 6.750 File "/usr/local/lib/python3.9/site-packages/django/db/backends/base/base.py", line 259, in cursor

0 6.750 return self._cursor()

0 6.750 File "/usr/local/lib/python3.9/site-packages/django/db/backends/base/base.py", line 235, in _cursor

0 6.750 self.ensure_connection()

0 6.750 File "/usr/local/lib/python3.9/site-packages/django/utils/asyncio.py", line 33, in inner

0 6.750 return func(*args, **kwargs)

0 6.750 File "/usr/local/lib/python3.9/site-packages/django/db/backends/base/base.py", line 219, in ensure_connection

0 6.750 self.connect()

0 6.750 File "/usr/local/lib/python3.9/site-packages/django/db/utils.py", line 90, in exit

0 6.751 raise dj_exc_value.with_traceback(traceback) from exc_value

0 6.751 File "/usr/local/lib/python3.9/site-packages/django/db/backends/base/base.py", line 219, in ensure_connection

0 6.751 self.connect()

0 6.751 File "/usr/local/lib/python3.9/site-packages/django/utils/asyncio.py", line 33, in inner

0 6.751 return func(*args, **kwargs)

0 6.751 File "/usr/local/lib/python3.9/site-packages/django/db/backends/base/base.py", line 200, in connect

0 6.751 self.connection = self.get_new_connection(conn_params)

0 6.751 File "/usr/local/lib/python3.9/site-packages/django/utils/asyncio.py", line 33, in inner

0 6.751 return func(*args, **kwargs)

0 6.751 File "/usr/local/lib/python3.9/site-packages/django/db/backends/mysql/base.py", line 234, in get_new_connection

0 6.751 connection = Database.connect(**conn_params)

0 6.751 File "/usr/local/lib/python3.9/site-packages/MySQLdb/init.py", line 123, in Connect

0 6.751 return Connection(*args, **kwargs)

0 6.751 File "/usr/local/lib/python3.9/site-packages/MySQLdb/connections.py", line 185, in init

0 6.752 super().init(*args, **kwargs2)

0 6.752 django.db.utils.OperationalError: (2005, "Unknown MySQL server host 'mysql_db' (-2)")


failed to solve: executor failed running [/bin/sh -c python manage.py migrate]: exit code: 1`

app-generator commented 1 year ago

Hello @TerminatedProcess

@JK-0 please take a look.

TerminatedProcess commented 1 year ago

Other note: Just in case you need to know.. I'm using Ubuntu under WSL2 No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 20.04.5 LTS Release: 20.04 Codename: focal

and have MySQL service running:

Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners.

Server version 8.0.31-0ubuntu0.20.04.1 Protocol version 10 Connection Localhost via UNIX socket UNIX socket /var/run/mysqld/mysqld.sock Uptime: 4 hours 40 min 11 sec

Threads: 2 Questions: 8 Slow queries: 0 Opens: 119 Flush tables: 3 Open tables: 38 Queries per second avg: 0.000

app-generator commented 1 year ago

The core error is this one:

MySQLdb.OperationalError: (2005, "Unknown MySQL server host 'mysql_db' (-2)")

Bassically, the Docker DB service is not resolved at Django level.

TerminatedProcess commented 1 year ago

Happy to test any fixes.

app-generator commented 1 year ago

Hello @TerminatedProcess

Please pull the latest sources and follow up on the suggested setup (also listed on README):

Let us know the results.

The app was cross-tested on Windows WSL, and Ubuntu 18.x LTS.

TerminatedProcess commented 1 year ago

Acknowledged.. sorry gone for vacation but back now.

TerminatedProcess commented 1 year ago

At first I couldn't make migration work as it couldn't find the server. But I went back and created virtual environment and activated it before building the docker containers and migrating. Afterwards migration worked as expected. My final Docker container configuration looks as follows.

--Images--
REPOSITORY                               TAG       IMAGE ID       CREATED          SIZE
sample-docker-django-mysql-appseed-app   latest    8228dc3707a7   2 minutes ago    1.02GB
<none>                                   <none>    f4a238ac9cdb   45 minutes ago   974MB
nginx                                    latest    88736fe82739   12 days ago      142MB
mysql                                    5.7       eef0fab001e8   3 weeks ago      495MB
-------------------------------------------------------
--Instances--
CONTAINER ID   IMAGE                                    COMMAND                  CREATED         STATUS         PORTS                               NAMES
e71b08844178   nginx:latest                             "/docker-entrypoint.…"   2 minutes ago   Up 2 minutes   80/tcp, 0.0.0.0:5085->5085/tcp      nginx
e79af2f89507   sample-docker-django-mysql-appseed-app   "gunicorn --config g…"   2 minutes ago   Up 2 minutes                                       appseed_app
c85433329ee2   mysql:5.7                                "docker-entrypoint.s…"   2 minutes ago   Up 2 minutes   0.0.0.0:3306->3306/tcp, 33060/tcp   mysql_db
-------------------------------------------------------
--Volumes--
DRIVER    VOLUME NAME
local     52c267a3bddff082093b5ca374d0df809729fe9bdb8ddc2e1f16baa40dd7b2f9
local     cc5cccd049885ec4a6b9b6811b99a9171f4ad81a1d5f64ddb86231007e96701d
local     da91465cbc942f4de893df86ff75908938e24244068b8604433240a5c4950bbe
-------------------------------------------------------
--Network--
NETWORK ID     NAME                                     DRIVER    SCOPE
75ea9870fed0   bridge                                   bridge    local
9a878d35d6cc   host                                     host      local
251a7abd970a   none                                     null      local
def42d39b04f   sample-docker-django-mysql_db_network    bridge    local
3f71f2c865a7   sample-docker-django-mysql_web_network   bridge    local

BTW, I was doing this in Ubuntu 20.04.5 LTS.

Thank you

app-generator commented 1 year ago

Hello @TerminatedProcess

Glad it worked. Let us know in case you need further assistance.

Validated. Closing.