File size: 4,230 Bytes
5c5ca8d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
# 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
   ```