2013-05-02 5 views
1

솔루션 :YII "속성 x가 정의되지 않음"...

응용 프로그램의 문서 루트에 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 쿼리 캐시를 재설정했다. 여전히이 팬텀 모델을 사용합니다.

+0

정확한 오류 메시지 란 무엇입니까? –

+0

"Samples.cancer_search"속성이 정의되지 않았습니다. property_search 변수를 사용하여 검색 속성에서 관계를 명확히하려했지만 모델에서 선언하지 않은 경우 실행되는 일반적인 오류 메시지입니다. dev에 그것은 단지 암 (모호한) 또는 cancer_search와 함께 작동합니다. 그러나 prod에서 암만 사용하면 검색은 아무 것도하지 않지만 오류가 발생하지 않으며 cancer_search를 사용하면 오류가 발생합니다. – glyph

+0

솔루션을 답변으로 게시하고 동의하십시오. –

답변

1

응용 프로그램의 문서 루트에 오래된 Samples.php 모델 파일이있는 것으로 나타났습니다. 우연히 거기에 업로드 했어야합니다.

놀랍게도, 오히려 YII 응용 프로그램이 실패하는 원인보다는, 이것은 실제로 내가 응용 프로그램은 그 구성 요소를로드 할 것으로 예상

했다 (또는 아니었다) 모델에 Samples.php 모델/재정의했다 보호 받고 있지만 분명히 아닙니다.

감사합니다.

+0

나는 똑같은 문제가 있지만 솔루션과 달리 모델 파일을 어디에도 둘 수 없다 (전체 서버 검색). 미친 짓이야 dev에 잘 작동합니다. 누구든지 다른 아이디어가 있습니까? 아니면 어쩌면 내가 새 질문으로 게시 할 것입니다 – redDevil

+0

그것은 내 테이블을 찌르다에서 뭔가 다른 것을 dev에에서 밝혀졌다, 그것은 열 이름이 아니었다 (나는 그걸 확인했다) 내가 테이블에 대한 SQL을 얻었어요 dev (export 명령), prod에있는 기존 테이블을 백업하고 dev에서 sql로 prod에 다시 작성합니다. 그 다음에! 그것이 작동합니다 .. 슬프게도 두 테이블 (백업 및 원본) 사이에 어떤 변화가 있었는지 알 수 없었습니다. 어쨌든 누군가가 같은 문제로이 질문을 접한다면 여기에 게시하십시오. – redDevil

관련 문제