我已经mod_wsgi
启动并运行了 Apache,现在正尝试将 Django 引入 MySQL。
我创建了一个名为“django”的数据库和一个“django”用户;并且我已在 django 上将所有权限授予 django:
grant ALL on django.* to 'django'@'localhost';
Django 的 settings.py 已经配置了 MySQL 的设置:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
'django': '', # Or path to database file if using sqlite3.
'django': '', # Not used with sqlite3.
'<a password>': '', # Not used with sqlite3.
'': '', # Set to empty string for localhost. Not used with sqlite3.
'': '', # Set to empty string for default. Not used with sqlite3.
}
}
但是当我尝试运行 syncdb( python manage.py syncdb
) 时我得到:
raceback (most recent call last):
File "manage.py", line 14, in <module>
execute_manager(settings)
File "/usr/lib/python2.6/site-packages/django/core/management/__init__.py", line 438, in execute_manager
utility.execute()
File "/usr/lib/python2.6/site-packages/django/core/management/__init__.py", line 379, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/usr/lib/python2.6/site-packages/django/core/management/base.py", line 191, in run_from_argv
self.execute(*args, **options.__dict__)
File "/usr/lib/python2.6/site-packages/django/core/management/base.py", line 219, in execute
self.validate()
File "/usr/lib/python2.6/site-packages/django/core/management/base.py", line 249, in validate
num_errors = get_validation_errors(s, app)
File "/usr/lib/python2.6/site-packages/django/core/management/validation.py", line 102, in get_validation_errors
connection.validation.validate_field(e, opts, f)
File "/usr/lib/python2.6/site-packages/django/db/backends/mysql/validation.py", line 14, in validate_field
db_version = self.connection.get_server_version()
File "/usr/lib/python2.6/site-packages/django/db/backends/mysql/base.py", line 338, in get_server_version
self.cursor()
File "/usr/lib/python2.6/site-packages/django/db/backends/__init__.py", line 250, in cursor
cursor = self.make_debug_cursor(self._cursor())
File "/usr/lib/python2.6/site-packages/django/db/backends/mysql/base.py", line 322, in _cursor
self.connection = Database.connect(**kwargs)
File "/usr/lib/python2.6/site-packages/MySQLdb/__init__.py", line 81, in Connect
return Connection(*args, **kwargs)
File "/usr/lib/python2.6/site-packages/MySQLdb/connections.py", line 187, in __init__
super(Connection, self).__init__(*args, **kwargs2)
_mysql_exceptions.OperationalError: (1045, "Access denied for user 'ec2-user'@'localhost' (using password: NO)")
最后一行让我很困惑。我不确定它为什么尝试以ec2-user
而不是进行连接Django
。
答案1
您知道,我不确定为什么它会默认为 ec2-user(除非它恰好是运行 Django 的进程的所有者),但该配置文件远非标准。我相信您想要:
default': {
'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
'NAME':'django', # Or path to database file if using sqlite3.
'USER':'django', # Not used with sqlite3.
'PASSWORD':'<a password>', # Not used with sqlite3.
'HOST': '', # Set to empty string for localhost. Not used with sqlite3.
'PORT': '', # Set to empty string for default. Not used with sqlite3.
}
看起来最初您不是替换“NAME”值,而是替换了“NAME”键(对于字典中的所有其他键也一样)。