# Development Troubleshooting Guide Common development issues and their solutions for the team. --- ## Table of Contents - [Docker DNS/WiFi Issues (Digital Nomads)](#docker-dnswifi-issues-digital-nomads) - [Go to Declaration Not Working (Ctrl+B)](#go-to-declaration-not-working-ctrlb) - [Import Errors and Red Underlines](#import-errors-and-red-underlines) - [Python Interpreter Issues](#python-interpreter-issues) - [Debugging Not Working](#debugging-not-working) - [Performance Issues](#performance-issues) - [Git Integration Issues](#git-integration-issues) - [Database Tool Issues](#database-tool-issues) - [Frontend Asset Loading Issues](#frontend-asset-loading-issues) --- ## Docker DNS/WiFi Issues (Digital Nomads) ### Problem When using Docker on Linux (Ubuntu/Xubuntu), the `docker0` bridge network interface can interfere with DNS resolution, causing: - Hotel/public WiFi captive portals not loading - DNS lookups failing or timing out - Internet connectivity issues when Docker is running - WiFi works fine until Docker starts This happens because Docker's bridge network (`docker0`) can take priority over your WiFi connection for DNS resolution. ### Solution: Lower docker0 Priority (Recommended) This solution lets Docker work normally while ensuring your WiFi DNS takes priority. Perfect for digital nomads working from hotels, cafes, and co-working spaces. **Step 1: Create the NetworkManager dispatcher script** ```bash sudo tee /etc/NetworkManager/dispatcher.d/99-docker-dns-fix << 'EOF' #!/bin/bash # Lower docker0 metric so WiFi takes priority for DNS # This prevents Docker from interfering with hotel/public WiFi captive portals if [ "$1" = "docker0" ]; then ip route del default via 172.17.0.1 dev docker0 2>/dev/null || true fi EOF ``` **Step 2: Make it executable** ```bash sudo chmod +x /etc/NetworkManager/dispatcher.d/99-docker-dns-fix ``` **Step 3: Restart NetworkManager** ```bash sudo systemctl restart NetworkManager ``` **Step 4: Verify it works** ```bash # Start Docker sudo systemctl start docker # Check routes - docker0 should NOT have a default route ip route | grep docker0 # Should return nothing or non-default routes only # Your WiFi should still work ping -c 3 google.com ``` ### Alternative Solutions #### Option A: Use Google DNS (Simple but less flexible) If you don't need hotel captive portal DNS: ```bash sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json << 'EOF' { "dns": ["8.8.8.8", "8.8.4.4"], "dns-opts": ["ndots:1"] } EOF sudo systemctl restart docker ``` !!! warning "Captive Portals" This option uses hardcoded Google DNS, which means hotel WiFi captive portals (login pages) may not work properly since they rely on DNS hijacking. #### Option B: Stop Docker when not in use ```bash # When you need WiFi without Docker interference sudo systemctl stop docker sudo ip link set docker0 down # When you need Docker again sudo systemctl start docker ``` ### Installing Docker on Xubuntu/Ubuntu If you haven't installed Docker yet: ```bash # Update package index sudo apt update # Install prerequisites sudo apt install -y ca-certificates curl gnupg # Add Docker's official GPG key sudo install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg sudo chmod a+r /etc/apt/keyrings/docker.gpg # Add the repository echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null # Install Docker sudo apt update sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin # Add your user to docker group (run docker without sudo) sudo usermod -aG docker $USER # Apply the DNS fix BEFORE using Docker sudo tee /etc/NetworkManager/dispatcher.d/99-docker-dns-fix << 'EOF' #!/bin/bash if [ "$1" = "docker0" ]; then ip route del default via 172.17.0.1 dev docker0 2>/dev/null || true fi EOF sudo chmod +x /etc/NetworkManager/dispatcher.d/99-docker-dns-fix # Log out and back in for docker group, then verify docker run hello-world ``` ### Using Docker with this Project After installing Docker with the DNS fix: ```bash # Start PostgreSQL for development make docker-up # Run tests (auto-starts test database) make test # Stop when done make docker-down ``` --- ## Go to Declaration Not Working (Ctrl+B) ### Problem When you press **Ctrl+B** (or Cmd+B on Mac) on a function, class, or variable, PyCharm shows: - "Cannot find declaration to go to" - No navigation occurs - Imports are marked as unresolved even though code runs fine **Example:** ```python from app.services.admin_audit_service import admin_audit_service # Ctrl+B on get_audit_logs doesn't work logs = admin_audit_service.get_audit_logs(db, filters) ``` ### Solution 1: Configure Source Roots (Most Common Fix) PyCharm needs to know your project structure: 1. **Mark project root as Sources Root:** - Right-click on project root folder (`letzshop-product-import`) - Select **"Mark Directory as"** → **"Sources Root"** - The folder icon should turn blue 2. **Via Project Structure settings:** - **File** → **Settings** (Ctrl+Alt+S) - Navigate to **Project: letzshop-product-import** → **Project Structure** - Select your project root directory - Click the **"Sources"** button at the top - Click **Apply** → **OK** 3. **Verify the change:** - Your project root should now have a blue folder icon - The `.idea` folder should show the source root is configured ### Solution 2: Verify Python Interpreter Ensure PyCharm is using the correct virtual environment: 1. **Check current interpreter:** - **File** → **Settings** → **Project** → **Python Interpreter** - Should show: `/home/samir/PycharmProjects/letzshop-product-import/.venv/bin/python` 2. **If wrong interpreter:** - Click the gear icon → **Add** - Select **"Existing environment"** - Navigate to: `[PROJECT_ROOT]/.venv/bin/python` - Click **OK** 3. **Wait for indexing:** - Bottom right corner will show "Indexing..." - Wait for it to complete before testing ### Solution 3: Invalidate Caches PyCharm's index might be corrupted: 1. **File** → **Invalidate Caches...** 2. Select all checkboxes: - ✅ Invalidate and Restart - ✅ Clear file system cache and Local History - ✅ Clear downloaded shared indexes 3. Click **"Invalidate and Restart"** 4. **Wait 2-5 minutes** for re-indexing after restart ### Solution 4: Reimport Project If nothing else works, rebuild the project structure: 1. **Close PyCharm** 2. **Delete PyCharm's cache folder:** ```bash rm -rf .idea/ ``` 3. **Reopen project in PyCharm:** - **File** → **Open** - Select project folder - Let PyCharm recreate `.idea/` folder 4. **Reconfigure:** - Set Python interpreter - Mark source roots - Wait for indexing ### Solution 5: Check .idea/workspace.xml Sometimes workspace configuration gets corrupted: ```bash # Close PyCharm first rm .idea/workspace.xml # Reopen PyCharm - it will regenerate this file ``` --- ## Import Errors and Red Underlines ### Problem Imports show red underlines and errors like: - "Unresolved reference" - "No module named 'app'" - Code runs fine but PyCharm shows errors ### Solution 1. **Check Sources Root** (see above) 2. **Verify `__init__.py` files exist:** ```bash # All package directories need __init__.py ls -la app/__init__.py ls -la app/services/__init__.py ls -la app/api/__init__.py ``` 3. **Add project root to PYTHONPATH:** - **File** → **Settings** → **Project** → **Project Structure** - Right-click project root → **"Mark as Sources Root"** 4. **Enable namespace packages** (if using PEP 420): - **File** → **Settings** → **Editor** → **Code Style** → **Python** - Check "Support namespace packages" --- ## Python Interpreter Issues ### Problem - "No Python interpreter configured" - Wrong Python version - Missing packages even though they're installed ### Solution 1. **Verify virtual environment:** ```bash # In terminal which python # Should show .venv/bin/python python --version # Should show Python 3.13.x ``` 2. **Configure in PyCharm:** - **File** → **Settings** → **Project** → **Python Interpreter** - Click gear icon → **Add** - Select **"Existing Environment"** - Choose: `[PROJECT_ROOT]/.venv/bin/python` 3. **Refresh interpreter packages:** - In Python Interpreter settings - Click refresh icon (⟳) - Wait for packages to reload 4. **Reinstall packages if needed:** ```bash source .venv/bin/activate pip install -r requirements.txt pip install -r requirements-dev.txt ``` --- ## Debugging Not Working ### Problem - Breakpoints are grayed out - Debugger doesn't stop at breakpoints - "Debugger is not attached" ### Solution 1: Check Run Configuration 1. **Edit configuration:** - Top right → Edit Configurations - Should use "Python" configuration type - Script path should point to your main file - Interpreter should be your virtual environment 2. **For FastAPI/Uvicorn:** - Module: `uvicorn` - Parameters: `main:app --reload` - Working directory: Project root ### Solution 2: Enable Gevent/Asyncio Support For async code (FastAPI): 1. **File** → **Settings** → **Build, Execution, Deployment** → **Python Debugger** 2. Check **"Gevent compatible"** or **"Asyncio compatible"** 3. Restart debugger ### Solution 3: Check Breakpoint Settings Right-click on breakpoint (red dot): - Ensure "Enabled" is checked - Check "Suspend" is set to "All" - Remove any conditions if not needed --- ## Performance Issues ### Problem - PyCharm is slow or freezing - High CPU/memory usage - Indexing takes forever ### Solution 1: Exclude Unnecessary Directories Exclude directories PyCharm doesn't need to index: 1. **File** → **Settings** → **Project** → **Project Structure** 2. **Mark as "Excluded":** - `.venv` (if not already) - `node_modules` - `.pytest_cache` - `__pycache__` - `htmlcov` - `site` (mkdocs build output) 3. **Right-click these folders in Project view:** - **Mark Directory as** → **Excluded** ### Solution 2: Increase Memory 1. **Help** → **Change Memory Settings** 2. Increase heap size to **2048 MB** or higher 3. Restart PyCharm ### Solution 3: Disable Unused Plugins 1. **File** → **Settings** → **Plugins** 2. Disable plugins you don't use 3. Keep essential: Python, Git, Database, Markdown 4. Restart PyCharm ### Solution 4: Pause Indexing If you need to work immediately: 1. **File** → **Pause Indexing** 2. Do your work 3. **Resume Indexing** when convenient --- ## Git Integration Issues ### Problem - Git operations fail - "Cannot run git" errors - Changes not detected ### Solution 1: Configure Git Executable 1. **File** → **Settings** → **Version Control** → **Git** 2. **Path to Git executable:** - Linux/Mac: `/usr/bin/git` - Windows: `C:\Program Files\Git\bin\git.exe` 3. Click **"Test"** to verify 4. Click **OK** ### Solution 2: Check Git Root 1. **File** → **Settings** → **Version Control** 2. Verify your project root is listed 3. If missing, click **+** and add it ### Solution 3: Refresh VCS 1. **VCS** → **Refresh File Status** 2. Or: **Git** → **Refresh** 3. Or press: **Ctrl+F5** --- ## Database Tool Issues ### Problem - Can't connect to PostgreSQL database - "Connection refused" errors - Tables not showing ### Solution 1: Verify Database Connection 1. **Database** tool window (usually right side) 2. Click **+** → **Data Source** → **PostgreSQL** 3. **Configure:** ``` Host: localhost Port: 5432 Database: orion_db User: [from .env file] Password: [from .env file] ``` 4. Click **"Test Connection"** 5. Download drivers if prompted ### Solution 2: Check Database is Running ```bash # Check if PostgreSQL is running sudo systemctl status postgresql # Start if not running sudo systemctl start postgresql ``` ### Solution 3: Verify .env Configuration ```bash # Check your .env file cat .env | grep DATABASE # Should show something like: DATABASE_URL=postgresql://user:password@localhost:5432/letzshop_db ``` --- ## Frontend Asset Loading Issues ### Problem - Tailwind CSS styles not loading - Alpine.js not initializing - Frontend pages look unstyled - Console errors about missing CSS/JS files - App doesn't work offline ### Solution 1: Verify CDN Fallback Files Exist All frontends use CDN with local fallback. Check that local copies exist: ```bash # From project root ls -lh static/shared/css/tailwind.min.css ls -lh static/shared/js/lib/alpine.min.js ``` **Expected output:** ``` -rw-r--r-- 1 user user 2.9M static/shared/css/tailwind.min.css -rw-r--r-- 1 user user 44K static/shared/js/lib/alpine.min.js ``` **If files are missing:** ```bash # Download Tailwind CSS cd static/shared/css curl -o tailwind.min.css https://cdn.jsdelivr.net/npm/tailwindcss@2.2.19/dist/tailwind.min.css # Download Alpine.js cd ../js/store curl -o alpine.min.js https://cdn.jsdelivr.net/npm/alpinejs@3.13.3/dist/cdn.min.js ``` ### Solution 2: Check Browser Console Open DevTools (F12) and check the Console tab for errors: **Common errors:** - `GET http://localhost:8000/static/shared/css/tailwind.min.css [404 Not Found]` → File missing - `Alpine.js CDN failed, loading local copy...` → Normal fallback behavior - `Uncaught ReferenceError: Alpine is not defined` → Alpine.js failed to load ### Solution 3: Test CDN Fallback Behavior To verify fallback works correctly: 1. **Start application:** ```bash uvicorn app.main:app --reload ``` 2. **Test with CDN blocked:** - Open browser DevTools (F12) - Go to Network tab - Add request blocking rule for `cdn.jsdelivr.net` - Reload page 3. **Verify fallback:** - Check Console for: `⚠️ Alpine.js CDN failed, loading local copy...` - Check Network tab shows local files loaded - Page should still work normally ### Solution 4: Verify Static Files Mounting Check that FastAPI is serving static files correctly: **In `app/main.py`:** ```python from fastapi.staticfiles import StaticFiles app.mount("/static", StaticFiles(directory="static"), name="static") ``` **Test static file serving:** ```bash # With app running, test directly: curl http://localhost:8000/static/shared/css/tailwind.min.css | head -n 5 curl http://localhost:8000/static/shared/js/lib/alpine.min.js | head -n 5 ``` ### Solution 5: File Permissions If files exist but return 403 Forbidden: ```bash # Fix permissions chmod 644 static/shared/css/tailwind.min.css chmod 644 static/shared/js/lib/alpine.min.js chmod 755 static/shared/css chmod 755 static/shared/js/store ``` ### Solution 6: For Offline Development If working completely offline, the CDN will always fail. Verify: 1. **Console shows fallback message** (expected behavior) 2. **Local files load successfully** 3. **Page functions normally** **To suppress CDN warnings when offline:** - Accept that CDN will fail (expected) - Fallback mechanism handles it automatically - Or modify templates to use local-only (see [CDN Fallback Strategy](../frontend/cdn-fallback-strategy.md#optimization-strategies)) ### Solution 7: Network Issues If both CDN and local files fail intermittently: 1. **Check browser cache:** - Open DevTools → Network tab - Check "Disable cache" option - Hard reload: Ctrl+Shift+R 2. **Clear browser cache completely:** - Browser Settings → Privacy → Clear browsing data - Select "Cached images and files" - Clear data 3. **Check for firewall/proxy issues:** ```bash # Test CDN accessibility curl https://cdn.jsdelivr.net/npm/tailwindcss@2.2.19/dist/tailwind.min.css | head -n 5 ``` ### Related Documentation See [CDN Fallback Strategy](../frontend/cdn-fallback-strategy.md) for complete details on: - How the fallback mechanism works - Updating local asset files - Production deployment considerations - Air-gapped deployment setup --- ## Quick Checklist for New Developers When setting up PyCharm for the first time: - [ ] Clone repository - [ ] Create virtual environment: `python -m venv .venv` - [ ] Activate: `source .venv/bin/activate` - [ ] Install dependencies: `pip install -r requirements.txt` - [ ] Open project in PyCharm - [ ] Configure Python interpreter (`.venv/bin/python`) - [ ] Mark project root as Sources Root - [ ] Exclude `.venv`, `.pytest_cache`, `__pycache__` directories - [ ] Configure Git executable - [ ] Configure database connection - [ ] Wait for indexing to complete - [ ] Test: Ctrl+B on an import should work --- ## Still Having Issues? ### Check PyCharm Logs 1. **Help** → **Show Log in Explorer/Finder** 2. Look for errors in `idea.log` 3. Search for "ERROR" or "Exception" ### Enable Debug Logging 1. **Help** → **Diagnostic Tools** → **Debug Log Settings** 2. Add: `#com.intellij.python` 3. Reproduce the issue 4. Check logs ### Report to Team If the issue persists: 1. Screenshot the error 2. Share PyCharm version: **Help** → **About** 3. Share Python version: `python --version` 4. Share OS: `uname -a` (Linux/Mac) or `ver` (Windows) 5. Post in team chat with: - What you were trying to do - What error you got - What you've tried so far --- ## Related Documentation - [PyCharm Make Configuration](pycharm-configuration-make.md) - Configure Make with virtual environment - [Contributing Guide](contributing.md) - Development workflow - [Database Migrations](migration/database-migrations.md) - Working with Alembic