DuckDB, Django и apache2 Permission Denied в производстве
У меня проблема с базой данных duckdb, которую я не могу понять.
После того как я создал базу данных .db
и поместил ее в корень apache2/Django webapp
, а также предоставил www-data
доступ к ней и ее каталогу, я все равно получаю отказ в разрешении.
Вот странная часть(и):
- Я не получаю ошибку разрешения при установлении соединения, я получаю ее только в части
fetchdf()
.
con = duckdb(database='path/to/db.db',read_only=True)
P = con.execute('SELECT * FROM products LIMIT 1;')
p = p.fetchdf() # Here's where the error gets thrown
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
duckdb.duckdb.IOException: IO Error: Permission denied
- Когда я запускаю тот же самый код python с
www-data
, все работает хорошо. Также и в ситуацииrunserver
все работает без проблем. Похоже, что проблема связана с производственной средой.
Я подозреваю, что duckdb хочет получить доступ к определенному каталогу или файлу, который я должен сделать доступным в конфигурации apache2, но мы с AI не знаем, что и где.
Помочь?
Я попробовал изменить temp_directory
, home_directory
, extension_directory
и secret_directory
на каталог в корневом каталоге webapp.
Я попробовал переместить файл db в другой каталог и дал apache разрешение на него также в .conf.
Looks like a SELinux problem, if you've already tried adjusting file permissions and the permission denied error persists, it's very likely that SELinux is blocking access.
You can try the following commands to check if SELinux is blocking the access and fix the problem:
sudo ausearch -c 'python' --raw | audit2allow -M duckdb_access
sudo semodule -i duckdb_access.pp
sudo ausearch -c 'python' --raw | audit2allow -M duckdb_access
: This command searches the SELinux audit logs for any access denials that the python process has encountered. It then uses audit2allow to generate an SELinux policy module named duckdb_access (can be another name, I just choose that name) containing rules to allow these accesses.
sudo semodule -i duckdb_access.pp:
Installs the generate policy generated policy module (duckdb_access.pp) allowing python to execute the process.
If this resolves the issue, you'll know SELinux was the cause of the error.