2016-04-25 11 views
0

Ich habe einen Fehler bei der Anpassung der Standardvorlage in odoo gemacht. Der Fehler befindet sich in der Liste der Kategorien des E-Commerce-Moduls. Nachdem ich meine Änderung gespeichert hatte, meldete Odoo einen Fehler auf der Benutzeroberfläche und schlug einen Rollback vor. Seitdem funktioniert die odoo-Website überhaupt nicht mehr.In Odoo, wo Advanced-View-Editor in Speichern von Dateien

Wo kann ich die geänderten Dateien auf dem Server finden, um zu ändern, verwerfen meine Änderungen? Hier ist mein Log Trace ... was nicht viel hilft!

2016-04-25 19:41:13,773 1505 ERROR fa_prod werkzeug: Error on request: 
Traceback (most recent call last): 
    File "/usr/lib/python2.7/dist-packages/werkzeug/serving.py", line 177, in run_wsgi 
    execute(self.server.app) 
    File "/usr/lib/python2.7/dist-packages/werkzeug/serving.py", line 165, in execute 
    application_iter = app(environ, start_response) 
    File "/opt/openerp/odoo/openerp/service/server.py", line 290, in app 
    return self.app(e, s) 
    File "/opt/openerp/odoo/openerp/service/wsgi_server.py", line 214, in application 
    return werkzeug.contrib.fixers.ProxyFix(application_unproxied)(environ, start_response) 
    File "/usr/lib/python2.7/dist-packages/werkzeug/contrib/fixers.py", line 144, in __call__ 
    return self.app(environ, start_response) 
    File "/opt/openerp/odoo/openerp/service/wsgi_server.py", line 202, in application_unproxied 
    result = handler(environ, start_response) 
    File "/opt/openerp/odoo/openerp/http.py", line 1290, in __call__ 
    return self.dispatch(environ, start_response) 
    File "/opt/openerp/odoo/openerp/http.py", line 1264, in __call__ 
    return self.app(environ, start_wrapped) 
    File "/usr/lib/python2.7/dist-packages/werkzeug/wsgi.py", line 588, in __call__ 
    return self.app(environ, start_response) 
    File "/opt/openerp/odoo/openerp/http.py", line 1428, in dispatch 
    ir_http = request.registry['ir.http'] 
    File "/opt/openerp/odoo/openerp/http.py", line 346, in registry 
    return openerp.modules.registry.RegistryManager.get(self.db) if self.db else None 
    File "/opt/openerp/odoo/openerp/modules/registry.py", line 339, in get 
    update_module) 
    File "/opt/openerp/odoo/openerp/modules/registry.py", line 370, in new 
    openerp.modules.load_modules(registry._db, force_demo, status, update_module) 
    File "/opt/openerp/odoo/openerp/modules/loading.py", line 351, in load_modules 
    force, status, report, loaded_modules, update_module) 
    File "/opt/openerp/odoo/openerp/modules/loading.py", line 255, in load_marked_modules 
    loaded, processed = load_module_graph(cr, graph, progressdict, report=report, skip_modules=loaded_modules, perform_checks=perform_checks) 
    File "/opt/openerp/odoo/openerp/modules/loading.py", line 157, in load_module_graph 
    init_module_models(cr, package.name, models) 
    File "/opt/openerp/odoo/openerp/modules/module.py", line 293, in init_module_models 
    obj._auto_end(cr, {'module': module_name}) 
    File "/opt/openerp/odoo/openerp/api.py", line 250, in wrapper 
    return old_api(self, *args, **kwargs) 
    File "/opt/openerp/odoo/openerp/models.py", line 2710, in _auto_end 
    cr.execute('ALTER TABLE "%s" ADD FOREIGN KEY ("%s") REFERENCES "%s" ON DELETE %s' % (t, k, r, d)) 
    File "/opt/openerp/odoo/openerp/sql_db.py", line 158, in wrapper 
    return f(self, *args, **kwargs) 
    File "/opt/openerp/odoo/openerp/sql_db.py", line 234, in execute 
    res = self._obj.execute(query, params) 
ProgrammingError: there is no primary key for referenced table "res_users" 

Antwort

2

Was passiert ist, dass Odoo die Datenbank beim Zurückrollen einer Vorlage beschädigt hat. Die meisten Tabellen hatten ihre Primärschlüssel verloren.

Um sie wieder einzurichten, habe ich den folgenden Code auf einem Arbeits Beispiel führte er die Liste der Primärschlüssel zu erhalten:

select tc.table_schema, tc.table_name, kc.column_name, kc.constraint_name 
from 
    information_schema.table_constraints tc, 
    information_schema.key_column_usage kc 
where 
    tc.constraint_type = 'PRIMARY KEY' 
    and kc.table_name = tc.table_name and kc.table_schema = tc.table_schema 
    and kc.constraint_name = tc.constraint_name 
order by 1, 2; 

Dann exportierte ich die Liste der Geschichten aus der beschädigten Datenbank:

select table_name from information_schema.tables; 

ich abgestimmt diese in Excel und eine Liste von Abfragen erstellen die Primärschlüssel ausgeführt werden wieder zu bekommen:

="ALTER TABLE "&B15&" ADD PRIMARY KEY ("&C15&");"`enter code here` 

Dabei ist B die Spalte mit Tabellen und C mit dem Feldnamen des Primärschlüssels. Dies ergibt eine lits von SQL-Abfragen wie folgt:

ALTER TABLE product_template ADD PRIMARY KEY (id); 
ALTER TABLE product_ul ADD PRIMARY KEY (id); 
ALTER TABLE product_uom ADD PRIMARY KEY (id); 
ALTER TABLE product_uom_categ ADD PRIMARY KEY (id); 
... 

Sie diese direkt auf dem DB ausführen können. Ich habe Odoo neu gestartet und voilà.

1

Meiner Meinung nach haben Sie einen Fehler in der Tabelle res_users gemacht. Vielleicht können Sie über diesen Link, wenn Sie Backup haben: localhost: 8069/web/database/manager
Eine andere Möglichkeit, erreichen Sie die Datenbank mit Postgresql-Manager auf localhost: 5432.

Der Quellcode des Programms befindet sich im Verzeichnis addons/modul_name.

Ich hoffe, dass dies für Sie nützlich ist.

+0

Aber ich habe nicht mit der Datenbank interagieren. Das einzige, was ich getan habe, war, das Rollback der Vorlage zu akzeptieren, wenn ich dazu aufgefordert wurde. Dann könnte etwas schief gelaufen sein. Ich werde versuchen, den Primärschlüssel zur Tabelle hinzuzufügen und zu sehen. – curuba

+0

Ich habe den Primärschlüssel für res_user Tabelle hinzugefügt. Dann dasselbe Problem mit wkf_transition. Einmal korrigiert, meldet es den fehlenden Primärschlüssel für website_menu. Gibt es überhaupt einen Primärschlüssel aus einer existierenden Postgres db zu extrahieren und sie zu dem beschädigten db zu schieben? – curuba

+0

Ein Typ sagte zu mir, [dieser Kommentar] (http://bugs.launchpad.net/openobject-server/+bug/897098/comments/15) löste das gleiche Problem. Ich hoffe, das ist auch eine gute Lösung für Sie. _ "Das Problem ist, dass Postgres noch läuft (Test mit: oben). Lösung: Lassen Sie Postgres laufen und wenn Sie oben mit CPU-Ressource beenden, stoppen Sie den Konsolenserver." _ –

Verwandte Themen