thadillo commited on
Commit
b55f151
·
1 Parent(s): 23654e5

Fix: Database permissions for Hugging Face Spaces deployment

Browse files

- Use /data directory for HF Spaces persistent storage
- Add DATABASE_PATH environment variable support
- Update Dockerfile to create writable /data directory
- Maintain backward compatibility with local development

Fixes SQLite 'unable to open database file' error on HF Spaces

Files changed (3) hide show
  1. Dockerfile +4 -2
  2. Dockerfile.hf +4 -2
  3. app/__init__.py +10 -1
Dockerfile CHANGED
@@ -19,8 +19,9 @@ RUN pip install --no-cache-dir -r requirements.txt
19
  # Copy application code
20
  COPY . .
21
 
22
- # Create instance directory for database
23
- RUN mkdir -p instance
 
24
 
25
  # Hugging Face Spaces uses port 7860
26
  EXPOSE 7860
@@ -29,6 +30,7 @@ EXPOSE 7860
29
  ENV FLASK_ENV=production
30
  ENV PYTHONUNBUFFERED=1
31
  ENV PORT=7860
 
32
 
33
  # Health check
34
  HEALTHCHECK --interval=30s --timeout=10s --start-period=40s --retries=3 \
 
19
  # Copy application code
20
  COPY . .
21
 
22
+ # Create data directory in a writable location for HF Spaces
23
+ # HF Spaces has persistent storage at /data
24
+ RUN mkdir -p /data && chmod 777 /data
25
 
26
  # Hugging Face Spaces uses port 7860
27
  EXPOSE 7860
 
30
  ENV FLASK_ENV=production
31
  ENV PYTHONUNBUFFERED=1
32
  ENV PORT=7860
33
+ ENV DATABASE_PATH=/data/app.db
34
 
35
  # Health check
36
  HEALTHCHECK --interval=30s --timeout=10s --start-period=40s --retries=3 \
Dockerfile.hf CHANGED
@@ -19,8 +19,9 @@ RUN pip install --no-cache-dir -r requirements.txt
19
  # Copy application code
20
  COPY . .
21
 
22
- # Create instance directory for database
23
- RUN mkdir -p instance
 
24
 
25
  # Hugging Face Spaces uses port 7860
26
  EXPOSE 7860
@@ -29,6 +30,7 @@ EXPOSE 7860
29
  ENV FLASK_ENV=production
30
  ENV PYTHONUNBUFFERED=1
31
  ENV PORT=7860
 
32
 
33
  # Health check
34
  HEALTHCHECK --interval=30s --timeout=10s --start-period=40s --retries=3 \
 
19
  # Copy application code
20
  COPY . .
21
 
22
+ # Create data directory in a writable location for HF Spaces
23
+ # HF Spaces has persistent storage at /data
24
+ RUN mkdir -p /data && chmod 777 /data
25
 
26
  # Hugging Face Spaces uses port 7860
27
  EXPOSE 7860
 
30
  ENV FLASK_ENV=production
31
  ENV PYTHONUNBUFFERED=1
32
  ENV PORT=7860
33
+ ENV DATABASE_PATH=/data/app.db
34
 
35
  # Health check
36
  HEALTHCHECK --interval=30s --timeout=10s --start-period=40s --retries=3 \
app/__init__.py CHANGED
@@ -10,7 +10,16 @@ def create_app():
10
 
11
  app = Flask(__name__)
12
  app.config['SECRET_KEY'] = os.getenv('FLASK_SECRET_KEY', 'dev-secret-key-change-in-production')
13
- app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///participatory_planner.db'
 
 
 
 
 
 
 
 
 
14
  app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
15
 
16
  db.init_app(app)
 
10
 
11
  app = Flask(__name__)
12
  app.config['SECRET_KEY'] = os.getenv('FLASK_SECRET_KEY', 'dev-secret-key-change-in-production')
13
+
14
+ # Use custom database path if set (for HF Spaces), otherwise use instance folder
15
+ db_path = os.getenv('DATABASE_PATH')
16
+ if db_path:
17
+ # Absolute path for Hugging Face Spaces
18
+ app.config['SQLALCHEMY_DATABASE_URI'] = f'sqlite:///{db_path}'
19
+ else:
20
+ # Relative path for local development
21
+ app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///participatory_planner.db'
22
+
23
  app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
24
 
25
  db.init_app(app)