143 lines
4.6 KiB
Python
143 lines
4.6 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Server troubleshooting script for 403/404 errors
|
|
Run this on the server to diagnose Apache/Passenger issues
|
|
"""
|
|
import os
|
|
import sys
|
|
|
|
print("=" * 70)
|
|
print("TROUBLESHOOTING 403/404 ERRORS")
|
|
print("=" * 70)
|
|
print()
|
|
|
|
# Check current directory
|
|
current_dir = os.getcwd()
|
|
print(f"📁 Current directory: {current_dir}")
|
|
print()
|
|
|
|
# Check file permissions
|
|
print("📌 File Permissions Check:")
|
|
files_to_check = [
|
|
'passenger_wsgi.py',
|
|
'.htaccess',
|
|
'app.py',
|
|
'data/users.json',
|
|
'templates/login.html'
|
|
]
|
|
|
|
for file in files_to_check:
|
|
if os.path.exists(file):
|
|
stat_info = os.stat(file)
|
|
perms = oct(stat_info.st_mode)[-3:]
|
|
print(f" ✓ {file:<30} Permissions: {perms}")
|
|
else:
|
|
print(f" ✗ {file:<30} NOT FOUND")
|
|
print()
|
|
|
|
# Check directory permissions
|
|
print("📌 Directory Permissions:")
|
|
dirs_to_check = ['.', 'templates', 'data', 'static', 'tmp']
|
|
for dir_path in dirs_to_check:
|
|
if os.path.exists(dir_path):
|
|
stat_info = os.stat(dir_path)
|
|
perms = oct(stat_info.st_mode)[-3:]
|
|
print(f" ✓ {dir_path:<30} Permissions: {perms}")
|
|
else:
|
|
print(f" ⚠️ {dir_path:<30} NOT FOUND (might be OK)")
|
|
print()
|
|
|
|
# Check for tmp/restart.txt
|
|
print("📌 Passenger Restart Check:")
|
|
if os.path.exists('tmp/restart.txt'):
|
|
from datetime import datetime
|
|
mtime = os.path.getmtime('tmp/restart.txt')
|
|
mtime_str = datetime.fromtimestamp(mtime).strftime('%Y-%m-%d %H:%M:%S')
|
|
print(f" ✓ tmp/restart.txt exists (last modified: {mtime_str})")
|
|
else:
|
|
print(f" ✗ tmp/restart.txt NOT FOUND")
|
|
print(f" Create it with: mkdir -p tmp && touch tmp/restart.txt")
|
|
print()
|
|
|
|
# Check environment variables
|
|
print("📌 Environment Variables:")
|
|
print(f" APPLICATION_ROOT: {os.environ.get('APPLICATION_ROOT', 'NOT SET')}")
|
|
print(f" HOME: {os.environ.get('HOME', 'NOT SET')}")
|
|
print(f" USER: {os.environ.get('USER', 'NOT SET')}")
|
|
print()
|
|
|
|
# Check .htaccess content
|
|
print("📌 .htaccess Configuration:")
|
|
if os.path.exists('.htaccess'):
|
|
print(f" ✓ .htaccess exists")
|
|
with open('.htaccess', 'r') as f:
|
|
content = f.read()
|
|
if 'PassengerEnabled' in content:
|
|
print(f" ✓ PassengerEnabled directive found")
|
|
else:
|
|
print(f" ✗ PassengerEnabled directive NOT FOUND")
|
|
|
|
if 'PassengerAppRoot' in content:
|
|
print(f" ✓ PassengerAppRoot directive found")
|
|
# Extract the path
|
|
for line in content.split('\n'):
|
|
if 'PassengerAppRoot' in line:
|
|
print(f" Value: {line.strip()}")
|
|
else:
|
|
print(f" ✗ PassengerAppRoot NOT FOUND")
|
|
|
|
if 'PassengerPython' in content:
|
|
print(f" ✓ PassengerPython directive found")
|
|
for line in content.split('\n'):
|
|
if 'PassengerPython' in line:
|
|
print(f" Value: {line.strip()}")
|
|
python_path = line.split()[-1] if len(line.split()) > 1 else ''
|
|
if os.path.exists(python_path):
|
|
print(f" ✓ Python executable exists")
|
|
else:
|
|
print(f" ✗ Python executable NOT FOUND at {python_path}")
|
|
else:
|
|
print(f" ✗ .htaccess NOT FOUND")
|
|
print()
|
|
|
|
# Try importing Flask
|
|
print("📌 Flask Import Test:")
|
|
try:
|
|
sys.path.insert(0, current_dir)
|
|
from app import app
|
|
print(f" ✓ Flask app imported successfully")
|
|
print(f" Routes registered: {len(list(app.url_map.iter_rules()))}")
|
|
except Exception as e:
|
|
print(f" ✗ Error importing app: {e}")
|
|
print()
|
|
|
|
# Recommendations
|
|
print("=" * 70)
|
|
print("COMMON FIXES FOR 403/404 ERRORS:")
|
|
print("=" * 70)
|
|
print()
|
|
print("1️⃣ RESTART PASSENGER:")
|
|
print(" mkdir -p tmp")
|
|
print(" touch tmp/restart.txt")
|
|
print()
|
|
print("2️⃣ CHECK FILE PERMISSIONS:")
|
|
print(" chmod 644 passenger_wsgi.py")
|
|
print(" chmod 644 .htaccess")
|
|
print(" chmod 755 .")
|
|
print()
|
|
print("3️⃣ VERIFY PATHS IN .htaccess:")
|
|
print(" PassengerAppRoot should point to: " + current_dir)
|
|
print()
|
|
print("4️⃣ CHECK APACHE ERROR LOG:")
|
|
print(" tail -50 ~/logs/error_log")
|
|
print(" (Look for Passenger errors)")
|
|
print()
|
|
print("5️⃣ VERIFY .htaccess IS BEING READ:")
|
|
print(" If AllowOverride is not set in Apache config, .htaccess is ignored")
|
|
print()
|
|
print("6️⃣ SIMPLER .htaccess (if still failing):")
|
|
print(" Try creating a minimal .htaccess with just:")
|
|
print(" PassengerEnabled on")
|
|
print()
|
|
print("=" * 70)
|