Beancount-Trans icon indicating copy to clipboard operation
Beancount-Trans copied to clipboard

上传支付宝/微信账单 报错不支持

Open xiaoyuesansui opened this issue 1 year ago • 8 comments

1.00 版本 docker compose部署 上传支付宝或微信账单csv文件 显示“请上传支持的账单文件”

xiaoyuesansui avatar May 10 '24 05:05 xiaoyuesansui

Releases 1.0.0 的问题已修复,Django的CSRF令牌导致,由于使用JWT认证已不需要CSRF令牌,已禁用。

项目已支持CI/CD,代码更新会自动重新构建平台以保持功能同步。

可以尝试使用最新代码或我自己提供的平台

dhr2333 avatar May 10 '24 14:05 dhr2333

尝试使用release 1.0中的backbends/fronbends, docker compose部署,但是还是一样的问题

xiaoyuesansui avatar May 11 '24 01:05 xiaoyuesansui

docker compose up -d 会直接使用dhr2333/beancount-trans-xxx:xxx的镜像,不应该出现无法解析的情况。

可以先试试http://localhost:38001/map/expenses能否正常返回数据。

项目刚启动数据库初始化需要时间,建议两三分钟后重试。

dhr2333 avatar May 11 '24 14:05 dhr2333

localhost:38001/map/expesens 可正常打开

但是由于没有导入数据,还没有任何记录

xiaoyuesansui avatar May 12 '24 12:05 xiaoyuesansui

未登录时拥有admin账户的查看权限,应能正常显示数据。

只有新注册用户时才没有任何记录。

可以重点排查一下数据库,以及后端与数据库之间的连接,例如docker logs -f beancount-trans-backenddocker logs -f beancount-trans-mysql

image

image

dhr2333 avatar May 12 '24 14:05 dhr2333

的确是backbends和sql通信有问题,请问该如何调整 ^^^^^^^^^^^^^^^^^^^^^

File "/usr/local/lib/python3.11/site-packages/django/db/backends/mysql/base.py", line 256, in get_new_connection

connection = Database.connect(**conn_params)

             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

File "/usr/local/lib/python3.11/site-packages/MySQLdb/init.py", line 121, in Connect

return Connection(*args, **kwargs)

       ^^^^^^^^^^^^^^^^^^^^^^^^^^^

File "/usr/local/lib/python3.11/site-packages/MySQLdb/connections.py", line 195, in init

super().__init__(*args, **kwargs2)

MySQLdb.OperationalError: (2002, "Can't connect to server on 'beancount-trans-mysql' (115)")

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

Traceback (most recent call last):

File "/code/beancount-trans/manage.py", line 24, in

main()

File "/code/beancount-trans/manage.py", line 20, in main

execute_from_command_line(sys.argv)

File "/usr/local/lib/python3.11/site-packages/django/core/management/init.py", line 442, in execute_from_command_line

utility.execute()

File "/usr/local/lib/python3.11/site-packages/django/core/management/init.py", line 436, in execute

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

File "/usr/local/lib/python3.11/site-packages/django/core/management/base.py", line 413, in run_from_argv

self.execute(*args, **cmd_options)

File "/usr/local/lib/python3.11/site-packages/django/core/management/base.py", line 459, in execute

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

         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

File "/usr/local/lib/python3.11/site-packages/django/core/management/base.py", line 107, in wrapper

res = handle_func(*args, **kwargs)

      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^

File "/usr/local/lib/python3.11/site-packages/django/core/management/commands/migrate.py", line 100, in handle

self.check(databases=[database])

File "/usr/local/lib/python3.11/site-packages/django/core/management/base.py", line 486, in check

all_issues = checks.run_checks(

             ^^^^^^^^^^^^^^^^^^

File "/usr/local/lib/python3.11/site-packages/django/core/checks/registry.py", line 88, in run_checks

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

             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

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

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

              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

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

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

              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

File "/usr/local/lib/python3.11/site-packages/django/db/backends/mysql/validation.py", line 14, in _check_sql_mode

self.connection.sql_mode & {"STRICT_TRANS_TABLES", "STRICT_ALL_TABLES"}

^^^^^^^^^^^^^^^^^^^^^^^^

File "/usr/local/lib/python3.11/site-packages/django/utils/functional.py", line 47, in get

res = instance.__dict__[self.name] = self.func(instance)

                                     ^^^^^^^^^^^^^^^^^^^

File "/usr/local/lib/python3.11/site-packages/django/db/backends/mysql/base.py", line 452, in sql_mode

sql_mode = self.mysql_server_data["sql_mode"]

           ^^^^^^^^^^^^^^^^^^^^^^

File "/usr/local/lib/python3.11/site-packages/django/utils/functional.py", line 47, in get

res = instance.__dict__[self.name] = self.func(instance)

                                     ^^^^^^^^^^^^^^^^^^^

File "/usr/local/lib/python3.11/site-packages/django/db/backends/mysql/base.py", line 408, in mysql_server_data

with self.temporary_connection() as cursor:

File "/usr/local/lib/python3.11/contextlib.py", line 137, in enter

return next(self.gen)

       ^^^^^^^^^^^^^^

File "/usr/local/lib/python3.11/site-packages/django/db/backends/base/base.py", line 691, in temporary_connection

with self.cursor() as cursor:

     ^^^^^^^^^^^^^

File "/usr/local/lib/python3.11/site-packages/django/utils/asyncio.py", line 26, in inner

return func(*args, **kwargs)

       ^^^^^^^^^^^^^^^^^^^^^

File "/usr/local/lib/python3.11/site-packages/django/db/backends/base/base.py", line 316, in cursor

return self._cursor()

       ^^^^^^^^^^^^^^

File "/usr/local/lib/python3.11/site-packages/django/db/backends/base/base.py", line 292, in _cursor

self.ensure_connection()

File "/usr/local/lib/python3.11/site-packages/django/utils/asyncio.py", line 26, in inner

return func(*args, **kwargs)

       ^^^^^^^^^^^^^^^^^^^^^

File "/usr/local/lib/python3.11/site-packages/django/db/backends/base/base.py", line 274, in ensure_connection

with self.wrap_database_errors:

File "/usr/local/lib/python3.11/site-packages/django/db/utils.py", line 91, in exit

raise dj_exc_value.with_traceback(traceback) from exc_value

File "/usr/local/lib/python3.11/site-packages/django/db/backends/base/base.py", line 275, in ensure_connection

self.connect()

File "/usr/local/lib/python3.11/site-packages/django/utils/asyncio.py", line 26, in inner

return func(*args, **kwargs)

       ^^^^^^^^^^^^^^^^^^^^^

File "/usr/local/lib/python3.11/site-packages/django/db/backends/base/base.py", line 256, in connect

self.connection = self.get_new_connection(conn_params)

                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

File "/usr/local/lib/python3.11/site-packages/django/utils/asyncio.py", line 26, in inner

return func(*args, **kwargs)

       ^^^^^^^^^^^^^^^^^^^^^

File "/usr/local/lib/python3.11/site-packages/django/db/backends/mysql/base.py", line 256, in get_new_connection

connection = Database.connect(**conn_params)

             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

File "/usr/local/lib/python3.11/site-packages/MySQLdb/init.py", line 121, in Connect

return Connection(*args, **kwargs)

       ^^^^^^^^^^^^^^^^^^^^^^^^^^^

File "/usr/local/lib/python3.11/site-packages/MySQLdb/connections.py", line 195, in init

super().__init__(*args, **kwargs2)

django.db.utils.OperationalError: (2002, "Can't connect to server on 'beancount-trans-mysql' (115)")

xiaoyuesansui avatar May 16 '24 07:05 xiaoyuesansui

docker compose down关闭服务,删除原有镜像,拉取最新代码,docker compose up -d重新启动会自动拉取最新镜像。

dhr2333 avatar May 16 '24 08:05 dhr2333

同样的问题……

xiaoyuesansui avatar May 17 '24 01:05 xiaoyuesansui

尝试使用浏览器无痕模式看看。

dhr2333 avatar Jun 01 '24 14:06 dhr2333

chrome 无痕模式 不会报错但是也不会有结果 另外,使用最新的image,backends 还是有和数据库间连接问题

xiaoyuesansui avatar Jun 03 '24 09:06 xiaoyuesansui

django.db.utils.OperationalError: (1130, "Host 'beancount-trans-backend.beancount-trans_default' is not allowed to connect to this MySQL server")

xiaoyuesansui avatar Jun 03 '24 09:06 xiaoyuesansui

该不会开了防火墙吧?

dhr2333 avatar Jun 03 '24 23:06 dhr2333

debian 10 ,防火墙是关的

xiaoyuesansui avatar Jun 04 '24 01:06 xiaoyuesansui

您遇到的这个错误 django.db.utils.OperationalError: (1130, "Host 'beancount-trans-backend.beancount-trans_default' is not allowed to connect to this MySQL server") 指的是 MySQL 数据库服务器没有授权主机 'beancount-trans-backend.beancount-trans_default' 来访问数据库。要解决这个问题,主要步骤包括查看和调整 MySQL 的用户访问权限。

以下是详细的解决步骤:

1. 了解 MySQL 用户权限

MySQL 数据库通过用户名、来源主机的组合来控制访问权限。错误提示该主机没有访问权限,表示数据库中没有相应的授权条目。

2. 登录 MySQL 数据库

首先,你需要以管理员身份登录到 MySQL 数据库:

mysql -u root -p

输入密码后登录。

3. 查看现有的用户权限

在 MySQL 命令行,你可以检查哪些用户有权限从哪些主机连接:

SELECT user, host FROM mysql.user;

这将列出所有用户及其对应的主机。

4. 赋予访问权限

如果该用户没有从 'beancount-trans-backend.beancount-trans_default' 连接的权限,你需要添加或更新权限。使用 GRANT 语句来赋予访问权限:

GRANT ALL PRIVILEGES ON databasename.* TO 'username'@'beancount-trans-backend.beancount-trans_default' IDENTIFIED BY 'password';

这里的 databasename 替换为你的数据库名,username 是访问该数据库的 MySQL 用户名,password 是该用户名的密码。

然后,刷新权限使更改生效:

FLUSH PRIVILEGES;

5. 重新尝试连接

更新完权限后,重新尝试让你的 Django 应用连接数据库。

有关注意事项

  • 安全性:在允许远程访问时要考虑安全性,确保密码足夥强大,且仅在必要时允许远程访问。
  • 错误排查:如果仍然遇到问题,确认数据库名、用户名正确,并检查是否有网络或防火墙设置阻止了连接。

通过以上步骤,可以解决由于权限配置不正确导致的连接问题。如果错误持续存在,继续检查网络设置和其他数据库配置问题。

dhr2333 avatar Jun 04 '24 02:06 dhr2333