我試圖將django 1.3應用程序移植到AppEngine + Google Cloud SQL。但是我在從本地開發django連接到我的cloudSQL實例時遇到了一些問題。無法在Google CloudSQL上運行syncdb
我可以使用dbshell
連接到CloudSQL。它顯示了瀏覽器身份驗證,並在提示符下丟棄。
(ENV)$ SETTINGS_MODE=prod ./manage.py dbshell
Google SQL Client
Type "help" or "?" for help.
Connecting to Google SQL database "my_project:prod1|my_db" on host None.
Using readline for history management.
Loading history file "/Users/user/.googlesql/django_proj#prod1.hist"
sql> SELECT CURRENT_USER();
Execution time: 0.694 seconds
+----------------+
| CURRENT_USER() |
+----------------+
| [email protected] |
+----------------+
我認爲這是奇怪的是,似乎dbshell實際上以root用戶運行的,即使我有我的settings.py
文件中沒有root密碼。但是,它仍然有效。
當我嘗試運行syncdb
時失敗。
(ENV)$ SETTINGS_MODE=prod ./manage.py syncdb
Traceback (most recent call last):
File "./manage.py", line 11, in <module>
execute_manager(settings)
File "/usr/local/google_appengine/lib/django-1.3/django/core/management/__init__.py", line 438, in execute_manager
utility.execute()
File "/usr/local/google_appengine/lib/django-1.3/django/core/management/__init__.py", line 379, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/usr/local/google_appengine/lib/django-1.3/django/core/management/base.py", line 191, in run_from_argv
self.execute(*args, **options.__dict__)
File "/usr/local/google_appengine/lib/django-1.3/django/core/management/base.py", line 220, in execute
output = self.handle(*args, **options)
File "/usr/local/google_appengine/lib/django-1.3/django/core/management/base.py", line 351, in handle
return self.handle_noargs(**options)
File "/usr/local/google_appengine/lib/django-1.3/django/core/management/commands/syncdb.py", line 56, in handle_noargs
cursor = connection.cursor()
File "/usr/local/google_appengine/lib/django-1.3/django/db/backends/__init__.py", line 252, in cursor
cursor = util.CursorWrapper(self._cursor(), self)
File "/usr/local/google_appengine/google/storage/speckle/python/django/backend/base.py", line 275, in _cursor
self.connection = Connect(**kwargs)
File "/usr/local/google_appengine/google/storage/speckle/python/django/backend/base.py", line 200, in Connect
return driver.connect(**kwargs)
File "/usr/local/google_appengine/google/storage/speckle/python/api/rdbms_googleapi.py", line 183, in __init__
super(GoogleApiConnection, self).__init__(*args, **kwargs)
File "/usr/local/google_appengine/google/storage/speckle/python/api/rdbms.py", line 812, in __init__
self.OpenConnection()
File "/usr/local/google_appengine/google/storage/speckle/python/api/rdbms.py", line 835, in OpenConnection
response = self.MakeRequest('OpenConnection', request)
File "/usr/local/google_appengine/google/storage/speckle/python/api/rdbms.py", line 946, in MakeRequest
raise _ToDbApiException(response.sql_exception)
google.storage.speckle.python.api.rdbms.OperationalError: (1045, u"Access denied for user 'my_prod_user'@'localhost' (using password: YES)")
在這種情況下,您可以看到它嘗試使用我的真實用戶而不是根用戶。並且拒絕訪問失敗。
如果我嘗試使用my_prod_user
直接連接到雲SQL,它工作得很好。
$ mysql -h XXX.XXX.XXX.XXX -u my_prod_user -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 5.5.36 (Google)
Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> SELECT CURRENT_USER();
+-----------------+
| CURRENT_USER() |
+-----------------+
| [email protected]% |
+-----------------+
1 row in set (0.19 sec)
有沒有人遇到過這個?