Wpis z mikrobloga

Siema mirki. Mam problem z Doctrine w projekcie. Projekt działa na symfony 5.2, mamy zainstalowane doctrine.
Założenia w projekcie były takie, że jeżeli mamy obiekty domentowe, to nie umieszczamy w nich nic spoza domeny, więc używanie adnotacji do powiązania - obiekt->tabela - odpada. Używamy XML. Do tego doszło niedawno użycie ValueObjects zamiast int/string/bool, bo można sobie fajne rzeczy tam zaimplementować (jakieś walidacje itp). No i trzeba te ValueObject zmapować na kolumny w bazie danych, więc xml -> embeddable -> embedded. Wszystko fajnie działa, Doctrine ładnie mapuje, no ale trzeba też jakoś te dane pobierać i wstawiać do bazy, więc tworzymy sobie Criteria wyszukiwania. Jeżeli użyte byłyby proste typy, to criteria byłoby np

[
'bookingId' => 'booking_id',
'operator' => 'equal',
'value' => '1'
]
```

ale jako, że są value objects, to mapowanie wygląda tak:

[
'bookingId.value' => 'bookingid',
'operator' => 'equal',
'value' => '1'
]
``
No i fajnie,wszystko działa, wrzucam zmiany na staging - nie działa. Doctrine nie wie co robić z
bookingId.value`. Sprawdzamy na produkcji wypchnięte zmiany (feature, który jeszcze nie jest używany) - to samo.

Tak więc problem jest taki - Doctrine poprawnie działa na dev, ale już na staging czy na produkcji - nie. Wali błędami. Cache symfony usunięte, doctrine nie ma podpiętego cache (chyba że jakies domyslne jest), z bazą danych problemów nie ma - podpinałem się swoim kompem do bazy na staging i wsyzstko działało, zmiana env. na wymuszenie działania aplikacji jako ta ze staging - to samo, nadal działa lokalnie. Wersja PHP - taka sama

Może ktoś ma jakiś pomysł skąd może wynikać taka rozbieżność?

#php #doctrine #symfony
  • 14
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@mariecziek: Co do błędu, to mam taki:
{"function":"unrecognizedField","args":["bookingId.value"],"file":"/var/www/web/releases/c9214cfd429059dd591242e3caf255a698d03661/vendor/doctrine/orm/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php","line":1719,"type":"::","class":"Doctrine\ORM\ORMException"}
  • Odpowiedz
podpinałem się swoim kompem do bazy na staging i wsyzstko działało


@mariecziek: to masz różnice może w wersjach paczek, zobacz czy w composer.json lokalnie masz wszystko tak samo jak na staging. Może doctrine'a masz w innej wersji.

I jeszcze dodatkowo jak już nic nie znajdziesz to spróbuj testowo nie używać Criteria tylko queryBuildera - miałem już w przeszłości różne jazdy z Criteria i mu nie ufam w 100%
  • Odpowiedz
via Wykop Mobilny (Android)
  • 0
@iluzorycznyMomentAbstrakcji: wywaliłem wszystko w vendor, usunąłem cache i zainstalowałem paczki od nowa. Nadal u mnie działa.

Też podejrzewam tu composera, bo na staging projekt jest budowany przez jenkinsa i na serwerze nie ma composera, więc wystarczy, że jenkins coś zbuduje niepoprawnie i klops, nie będzie to działało tak, jak lokalnie, no ale na razie nie mam na to żadnych dowodów
  • Odpowiedz
via Wykop Mobilny (Android)
  • 0
@ajgoron: no ale przecież zmieniłem. Żeby było zabawniej, to u innych też działa, a staging nie.

Tak się kończy używanie vagranta lokalnie, a na innych środowiskach wszystko instaluje się bezpośrednio na serwerze.
  • Odpowiedz
@iluzorycznyMomentAbstrakcji: Oba pliki są takie same. ten z serwera i mój. Doctrine nie jest bundlem w tym przypadku, tzn. nie mam tego w konfiguracji bundli.

Myślę, że pliki są takie same, ale jak chyba wiesz - kod jest "kompilowany" do /var/cache skąd jest ładowany po każdym użyciu. Podejrzewam, że jeżeli są jakieś różnice - to będą właśnie tam. No ale zmiana środowiska na staging, wywalenie plików stamtąd nic nie zmieniła.
  • Odpowiedz
@mariecziek a takie jeszcze pytanie - na podstawie czego jenkins generuje środowisko i jakie skrypty wykonuje? masz jeszcze jakiegoś dłuższego loga niż to co dałeś wcześniej?
  • Odpowiedz
@ajgoron: Nie mamy DevOpsa, który by to ogarnął. Jeszcze 1.5 roku temu deployment był przy użyciu FileZilla.

Amazon CodeBuild Buduje wszystko, pakuje do .zip i później rozpakowuje to w odpowiednim miejscu, na odpowiednim serwerze. Właśnie pobrałem sobie takiego zipa na 420mb.
  • Odpowiedz