응용 프로그램의 문서 루트에 Samples.php 파일이 있습니다. 이것이 앱의 정상적인 Yii 실행 체인에서 실제로 어떻게 작동했는지는 저 밖에 있습니다. 하지만 그랬어, 나는 그것을 삭제하고 지금은 정상적으로 작동합니다. 감사!
업데이트 : 이것은 (내가 아는) 모든 캐싱을 제외하고, 거의 확실하게 응용 프로그램 수준의 캐싱 문제입니다 사용할 수 없습니다. 모델 폴더로 이동하여 다양한 모델을 삭제할 수 있습니다. immediatley Yii는 이러한 모델이 존재하지 않는다는 예상 오류를 던집니다. 샘플 모델은 그렇지 않습니다. 그것은 주변에있다.
나는 Yii 검색에 매우 이상한 문제가 있습니다.
제가하고있는 일은 전에 100 번이나 해본 것처럼 관련된 모델을 검색하는 것입니다. 내 개발 호스트에서 제대로 작동하지만 프로덕션 호스트에 게시하자 마자 실패합니다. "Samples.cancer_search"속성이 정의되지 않았습니다.
두 번 및 세 번 파일이 실제로 게시되고 있는지 확인했습니다. 이 속성은 샘플 모델의 규칙에있는 "safe on search"목록에 나열됩니다. 이 속성은 모델에서 public var로 선언됩니다. dev에서 완벽하게 작동하지만 이러한 파일 (및 전체 응용 프로그램)을 프로덕션에 게시하면 속성이 정의되지 않습니다.
심지어 낯선 서버로 들어가서 나쁜 모델, 컨트롤러 및 뷰를 복사하여 새 이름 (동일한 db 테이블 사용)을 사용하고 정상적으로 작동합니다. 내가 한 모든 것은 모델, 컨트롤러 및 뷰의 이름을 샘플에서 SamplesTest/SamplesTestController로 변경 한 것뿐입니다!
(캐시를 사용하여) 모든 캐싱을 비활성화하고 서버를 다시 시작했습니다. 여전히 같은 오류가 발생합니다.
모델 (안 자극에, 개발에 사용할 수 있습니다. 명확성을 위해 단축)
class Samples extends CActiveRecord
{
// .... //
// for search/sort on related data
public $cancer_search;
public $cancer_search_test;
// .... //
public function rules()
{
return array(
array('id, patient_id, cancer, cancer_id, cancer_search, cancer_search_test, requested_date, ...', 'safe', 'on'=>'search'),
);
}
public function relations()
{
// NOTE: you may need to adjust the relation name and the related
// class name for the relations automatically generated below.
return array(
'cancer' => array(self::BELONGS_TO, 'Cancers', 'cancer_id'),
'cancerTest' => array(self::BELONGS_TO, 'Cancers', 'cancer_id'),
)
}
public function attributeLabels()
{
return array(
'cancer_id' => 'Cancer Classification',
'cancer' => 'Cancer Classification',
'cancer_search' => 'Cancer Classification',
'cancer_search_test' => 'Cancer Classification',
);
}
public function search()
{
$criteria=new CDbCriteria;
$criteria->group = 't.id';
$criteria->together = true;
$criteria->with[] = 'cancer';
if($this->cancer_search) {
$criteria->addSearchCondition("cancer.name",$this->cancer_search);
}
$criteria->compare('id',$this->id,true);
$criteria->compare('patient_id',$this->patient_id,true);
return new CActiveDataProvider($this, array(
'criteria'=>$criteria,
'sort'=>array(
'attributes'=>array(
'cancer_search'=>array(
'asc'=>'cancer.name',
'desc'=>'cancer.name DESC',
),
'*',
),
),
));
}
나는 아무 소용에 YII 자산 폴더를 삭제 한
// on production, this doesn't throw an error, but the search doesn't work
$columns[]= array(
'name' => 'cancer',
'value'=>'$data->cancer->name',
'type' => 'raw',
'htmlOptions'=>array('style'=>'width:100px;'),
);
// gives property not defined error on prod, even though it is defined, and works fine on dev
$columns[]= array(
'name' => 'cancer_search',
'value'=>'$data->cancer->name',
'type' => 'raw',
'htmlOptions'=>array('style'=>'width:100px;'),
);
// both of these work fine on dev.
검색보기를.
나는 미쳐 버릴 것인가 아니면 아마도 캐싱 중 일부인지 모르겠다.
감사합니다.
- 나는 자극 서버에 어느 열 머리글에서 올바른 속성 레이블을 사용하지 않는 것 검색 그리드에서 발견
하나 추가 clue-. 왜 그것이 dev와 prod에서 같은 이유인지는 모르겠습니다.
편집이 나는 단순히 모델의 속성 public var를 선언하고 컨트롤러 검색 방법에 로그와 같은 거래로 추적을 시도했다. Var는 dev에 있지만 prod에는 존재하지 않습니다.
편집 3 이제 뭔가가 캐시되고 있음을 알고 있습니다. 방금 샘플 모델을 삭제하고 새 속성을 찾지 못하는 오래된 캐시 된 버전을 계속 사용합니다.Memcached가 비활성화되어 있고 mysql 쿼리 캐시를 재설정했다. 여전히이 팬텀 모델을 사용합니다.
정확한 오류 메시지 란 무엇입니까? –
"Samples.cancer_search"속성이 정의되지 않았습니다. property_search 변수를 사용하여 검색 속성에서 관계를 명확히하려했지만 모델에서 선언하지 않은 경우 실행되는 일반적인 오류 메시지입니다. dev에 그것은 단지 암 (모호한) 또는 cancer_search와 함께 작동합니다. 그러나 prod에서 암만 사용하면 검색은 아무 것도하지 않지만 오류가 발생하지 않으며 cancer_search를 사용하면 오류가 발생합니다. – glyph
솔루션을 답변으로 게시하고 동의하십시오. –