|
# Interpreter Process Configuration |
|
|
|
## 修正済み: 環境に依存しない動的パス設定 |
|
|
|
### 概要 |
|
`process.py`のBASE_PATH設定が固定値だったため、異なる環境でエラーが発生していた問題を修正しました。現在は環境に応じて動的にパスを設定します。 |
|
|
|
### 自動検出される環境 |
|
|
|
1. **環境変数での設定** (最優先) |
|
```bash |
|
export INTERPRETER_BASE_PATH="/custom/path/to/controller/" |
|
``` |
|
|
|
2. **GitHub Codespaces環境**: `/workspaces/` を含むパス |
|
- 自動設定: `{current_dir}/app/Http/controller/` |
|
|
|
3. **Docker環境**: `/home/user/app/` パスで実行 |
|
- 自動設定: `/home/user/app/app/Http/controller/` |
|
|
|
4. **ローカル開発環境**: `fastapi_django_main_live` を含むパス |
|
- 自動設定: `{current_dir}/app/Http/controller/` |
|
|
|
5. **フォールバック環境**: 上記以外 |
|
- 自動設定: `{current_dir}/temp_controller/` |
|
|
|
### 修正内容 |
|
|
|
#### 1. 動的パス検出の実装 |
|
```python |
|
def get_base_path(): |
|
"""環境に応じて動的にベースパスを取得""" |
|
# 環境変数チェック |
|
# 現在のディレクトリ分析 |
|
# 適切なパス生成 |
|
# フォールバック処理 |
|
``` |
|
|
|
#### 2. 安全な初期化 |
|
```python |
|
# 遅延初期化でimport時エラーを回避 |
|
BASE_PATH = None |
|
|
|
def get_base_path_safe(): |
|
global BASE_PATH |
|
if BASE_PATH is None: |
|
BASE_PATH = get_base_path() |
|
return BASE_PATH |
|
``` |
|
|
|
#### 3. 堅牢なエラーハンドリング |
|
```python |
|
def ensure_base_path_exists(): |
|
# パス作成の試行 |
|
# 書き込み権限確認 |
|
# フォールバック処理 |
|
# 詳細なログ出力 |
|
``` |
|
|
|
### 使用例 |
|
|
|
#### 通常の使用(自動検出) |
|
```python |
|
from mysite.interpreter.process import ensure_base_path_exists, get_base_path_safe |
|
|
|
# パスの確認と作成 |
|
if ensure_base_path_exists(): |
|
base_path = get_base_path_safe() |
|
print(f"Base path ready: {base_path}") |
|
``` |
|
|
|
#### 環境変数での設定 |
|
```bash |
|
# .env ファイルまたはシェル |
|
export INTERPRETER_BASE_PATH="/workspace/my_project/controllers/" |
|
|
|
# Python |
|
from mysite.interpreter.process import get_base_path |
|
path = get_base_path() # 設定された環境変数を使用 |
|
``` |
|
|
|
#### Docker環境での使用 |
|
```dockerfile |
|
ENV INTERPRETER_BASE_PATH="/app/controllers/" |
|
``` |
|
|
|
#### Codespaces環境での使用 |
|
```json |
|
// .devcontainer/devcontainer.json |
|
{ |
|
"containerEnv": { |
|
"INTERPRETER_BASE_PATH": "/workspaces/fastapi_django_main_live/app/Http/controller/" |
|
} |
|
} |
|
``` |
|
|
|
### トラブルシューティング |
|
|
|
#### 権限エラーの場合 |
|
```bash |
|
# ディレクトリを手動作成 |
|
mkdir -p /path/to/controller |
|
chmod 755 /path/to/controller |
|
|
|
# 環境変数設定 |
|
export INTERPRETER_BASE_PATH="/path/to/controller/" |
|
``` |
|
|
|
#### パス確認方法 |
|
```python |
|
from mysite.interpreter.process import get_base_path_safe |
|
print(f"Current BASE_PATH: {get_base_path_safe()}") |
|
``` |
|
|
|
#### 設定検証スクリプト |
|
```bash |
|
cd /workspaces/fastapi_django_main_live |
|
python verify_process_fix.py |
|
``` |
|
|
|
### ログの確認 |
|
```python |
|
from mysite.logger import logger |
|
|
|
# 現在のベースパスを確認 |
|
from mysite.interpreter.process import get_base_path_safe |
|
logger.info(f"Current BASE_PATH: {get_base_path_safe()}") |
|
``` |
|
|
|
### 既知の問題と解決策 |
|
|
|
#### 問題: ImportError |
|
**原因**: Django設定が正しく読み込まれていない |
|
**解決策**: |
|
```python |
|
import os |
|
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings') |
|
import django |
|
django.setup() |
|
``` |
|
|
|
#### 問題: 権限エラー |
|
**原因**: ディレクトリへの書き込み権限がない |
|
**解決策**: 環境変数で書き込み可能なパスを指定 |
|
|
|
#### 問題: パスが見つからない |
|
**原因**: 自動検出が失敗 |
|
**解決策**: INTERPRETER_BASE_PATH環境変数を明示的に設定 |
|
|
|
### テスト方法 |
|
|
|
1. **基本テスト** |
|
```bash |
|
python verify_process_fix.py |
|
``` |
|
|
|
2. **Django環境でのテスト** |
|
```bash |
|
python manage.py shell -c "from mysite.interpreter.process import get_base_path; print(get_base_path())" |
|
``` |
|
|
|
3. **カスタムパステスト** |
|
```bash |
|
export INTERPRETER_BASE_PATH="/tmp/test_path/" |
|
python verify_process_fix.py |
|
``` |
|
|