python - community - odoo enterprise download free
Migraciones Odoo (5)
Tengo algunos módulos que amplían los complementos de Odoo. Por ejemplo, los modelos en my_module
que expanden crm
:
class Lead(models.Model):
_inherit = ''crm.lead''
# exmaple fields
field_1 = fields.Char(...)
field_2 = fields.Many2one(...)
# ... field 99
class Stage(models.Model):
_inherit = ''crm.stage''
# exmaple fields
field_1 = fields.Char(...)
field_2 = fields.Many2one(...)
# ... field 99
La misma situación es para los módulos que expanden hr
, product
, etc. Necesito hacer algunos cambios en los modelos. Por ejemplo, en my_module_1
, necesito cambiar un par de campos (tipo, relación), en my_module_2
, solo para eliminar algunos campos, etc. Por supuesto, también necesito cambiar las vistas de cada módulo. Y, por supuesto, tengo mis modelos personalizados que tienen dependencias con modelos de diferentes aplicaciones / módulos. Pero tengo datos sobre la producción que deben ser almacenados. No encontré ninguna información sobre migraciones (o sincronización de módulos) en Odoo.
Mi pregunta es: ¿Cuál es la mejor manera de actualizar módulos / aplicaciones en producción (si tenemos muchos cambios en los campos de modelos y vistas)? Gracias por adelantado.
Mi pregunta es: ¿Cuál es la mejor manera de actualizar módulos / aplicaciones en producción (si tenemos muchos cambios en los campos de modelos y vistas)?
Si bien esta pregunta ha existido por un tiempo, no puedo ver ninguna respuesta canónica, por lo tanto, aquí están mis dos centavos.
El problema de la migración de una versión a otra en Odoo es bastante común y definitivamente complicado. Con eso en mente, el proyecto OpenUpgrade ha sido creado. OpenUpgrade es básicamente una upgrade path
que le ayudará a transformar sus datos y modelos de la versión A a la versión B. Por ejemplo, si un campo llamado fieldA ha cambiado su tipo en la versión 9 y está en la versión 8, OpenUpgrade se hará cargo de esto Haciendo las transformaciones necesarias.
OpenUpgrade también le brinda la posibilidad de crear sus propios scripts de migración que harán lo que sea necesario para que su módulo sea portado hacia adelante (o hacia atrás) en varias versiones. Para los módulos estándar, estos scripts ya se han escrito en una extensión, pero para los tuyos es posible que tengas que escribir un poco.
Le sugiero que eche un vistazo a la documentación anterior, esta es básicamente su primera parada cuando hablamos de migraciones en Odoo.
Primero debe volcar la base de datos de producción y luego restaurarla en su sistema local.
Una vez restaurado en el sistema local, desarrolle sus módulos personalizados para expandir las características del modelo existente.
Instale los módulos desarrollados en el sistema local (base de datos restaurada) y vea los cambios que realizó. Si todo es perfecto con los datos existentes, instale ese módulo en la base de datos de producción.
Para volcar la base de datos de producción, ejecute el siguiente comando en postgres. Comando: pg_dump dbname> outfile Ejemplo: pg_dump prod_db> prod_db.sql
Antes de restaurar la base de datos, debe crear una base de datos nueva en su sistema local. Para crear una base de datos nueva, ejecute el siguiente comando, comando: createdb --owner owner_name --encoding utf-8 dbname Ejemplo: createdb --owner odoo --encoding utf-8 prod_db
Para restaurar la base de datos de producción, ejecute el siguiente comando en postgres. Comando: psql dbname <infile path Ejemplo: pg_dump prod_db> prod_db.sql
Reinicie el servidor desde la línea de comandos una vez con los indicadores -u y -d, por ejemplo.
sudo service odoo stop
/path/to/odoo/odoo.py -d <your_db_name> -u custom_module1,custom_module2
Si está tratando con un servidor de producción, probaría esto localmente, en su máquina de desarrollo con un volcado nuevo del DB de producción, me aseguraré de que funcione, lo modifique si es necesario (por ejemplo, algunos campos pueden necesitar valores predeterminados, lo que sea), pruébelo de nuevo en otro volcado nuevo, hasta el punto de que todo lo que tengo que hacer es reiniciar el servidor como se indicó anteriormente para que se realicen los cambios. Una vez que eso ocurra, haga una copia de seguridad de la base de datos, el almacén de datos e incluso los módulos afectados en el servidor de producción, cargue el (los) nuevo (s) módulo (s) y reinicie el servidor de producción como se indicó anteriormente (no se deben descargar bases de datos de prueba a producción aquí) la actualización del módulo debe tener cuidado de cambios en la base de datos.
Si está intentando cambiar la estructura de una tabla considerablemente (por ejemplo, cambiando el tipo de datos de los campos) y retener los datos en tablas, la única forma de hacerlo es crear primero agregar NUEVOS campos con el nuevo tipo de datos, rellenarlos con datos de campos antiguos (ya sea directamente con las consultas postgres o dentro de su "módulo de versión provisional") y esto realmente depende de los cambios, un cambio de selección a muchos implica que la inserción de valores de selección en una nueva tabla, dos cosas muy diferentes desde el punto de vista de la base de datos el tipo de campo real en la tabla será un entero, el ID de la fila que contiene el valor de selección en una tabla relacional ...
Una vez que haya rellenado sus nuevos campos, cree la versión final del módulo eliminando todos los campos que ya no necesita (conserve la otra versión para la base de datos de producción).
Probablemente probaría la población de la base de datos manualmente en el servidor de desarrollo primero en postgres o con alguna herramienta como pgadminIII, pero planeo crear un script para hacerlo en el servidor de producción (o, mejor aún, incorporarlo todo en la nueva versión del módulo) como Tendrá que estar abajo mientras eso suceda.
También me gustaría ver mis tablas de postgres después de que todo haya terminado, algunos campos podrían estar allí incluso si el nuevo módulo no los usa.
Lo siento, no conozco ninguna forma más simple y automática de hacerlo, simplemente hay demasiadas variables ...
Según su ejemplo, creo que ya sabe cómo agregar un nuevo campo a un modelo existente.
Todavía no entiendo por qué alguien querría eliminar un campo de un modelo existente. Esto es / será más problemático de lo que vale (si hay una razón válida, hágamelo saber). Esto también se aplica cuando se trata de refundir los tipos de campo. Dicho esto, puede eliminar / reemplazar / ocultar bastante fácilmente un campo existente en una vista, lo que en esencia debería lograr el mismo resultado.
https://www.odoo.com/forum/help-1/question/add-remove-fields-to-inherited-custom-module-72945
<record model="ir.ui.view" id="enter_an_id_here">
<field name="name">some.text.here.form</field>
<field name="model">crm.lead</field>
<field name="inherit_id" ref="crm.external_id_here" />
<field name="arch" type="xml">
<field name="name" position="after">
<field name="your_field_name"/>
</field>
</field>
</record>
También habló sobre la migración de datos de dependientes a otro modelo a través de copiar / pegar. Esto no debería ser necesario, ya que simplemente puede acceder a los datos en el modelo existente a través de una referencia directa de objeto / campo, o utilizando un campo relacionado.
new_field = fields.Char(string=''String'', related=''product_id.name'')
or inside python
value = self.product_id.name
No diré nada relacionado con la instalación de los comandos del lado del módulo / servidor ya que las otras respuestas aquí ya han abordado estos aspectos.
Tal vez hay algunas herramientas para migraciones en la versión empresarial de Odoo, pero no he encontrado ninguna información sobre esto. Así que la solución que uso es hacer todo manualmente. Paso a paso, con atención. Si conoces una forma mejor házmelo saber.
Por ejemplo. Si necesitamos eliminar algunos campos:
- Elimine campos de modelos y vistas en su módulo / aplicación.
- Detener el servidor openerp . Ejecutar SQL que caen nuestras columnas.
- Implementar nuevas versiones de modelos y vistas al servidor. Iniciar el servidor openerp .
- Active el modo de desarrollador -> Vaya a configuración -> encuentre su módulo / aplicación -> haga clic en Actualizar (Actualizar)
Si necesita cambiar el tipo / relación de campos:
- Agregue un campo (con un nuevo tipo / relación) a su modelo.
- Prepare el script sql que transferirá los datos de la columna anterior a la nueva columna / tabla.
- Elimine el campo antiguo de su modelo y vistas.
- Detener el servidor openerp . Ejecute el script sql, suelte las columnas antiguas.
- Implementar nuevas versiones de modelos y vistas al servidor. Iniciar el servidor openerp .
- Active el modo de desarrollador -> Vaya a configuración -> encuentre su módulo / aplicación -> haga clic en Actualizar (Actualizar)
Tenga cuidado al cambiar las relaciones (one2many, many2many). Realiza volcados y versiones de aplicaciones. Verifique sus modificaciones en la máquina local con db de producción un par de veces.
Una cosa más sobre nuevos campos con las relaciones. Por ejemplo tengo módulo_1 que depende de crm . módulo_2 que depende del módulo_1, etc. Necesito agregar algunos campos a los modelos de CRM y mostrarlos en el módulo_1 . En module_2 necesito mostrar nuevos campos de mis modelos personalizados en module_1 .
Podemos agregar todos los nuevos campos a los modelos y vistas en nuestros módulos. Detenga el servidor y ejecute el servidor con el parámetro --update así:
./openerp-server --update=all
En este caso todos los módulos serán actualizados. Si necesitamos actualizar solo los módulos que dependen de crm solo necesitamos actualizar crm :
./openerp-server --update=crm