Hello Antonio,

This is a vast subject... And all suggestions couldn't apply or you will
not agree with all... But here a couple of them :

1) Web2py app versioning tool only allow tracking of a single branch... So,
you could try to not branch your app development and only commit change
that should hit trunck (stable) improvement. It really not a best practice,
but it could avoid one of the problem you mention, having different db
schema related to different branch. It not a best pratice since with git
branching is encorage a lot... And a feature "should" requires a branch
since you don't really know when you will deliver it, so you don't want to
be stock with changes to be commit that are not ready for trunk...
2) One of the great force of web2py as you mention is the DAL-model and
migration that can allow db schema versionning which is rather a difficult
things to achieve for a single developper or a little team... So if you
keep you data out of the scope here... You can version you db schema if
every change is apply to web2py dal models in the first place and you use
web2py internal migration feature. But you have to keep migrating you data
from one schema to another... So you hand up to coding migration script or
and you should do this instead you develop ETL migration routine for your
data. So your data can be see as a "flux" that you manage with ETL. That
way you can put your data everywhere anytime in addtion to the versionning
of your db schema.
3) About db schema inconsistencies that may arrive depending of the nature
of the change apply to the model, you have to know that web2py migration
will never delete anything and only force type change when there is no risk
to do it. What it means is that there will be time where you db schema will
not be in sync with you DAL model which also means that you will have to
get down from the dal abstraction level and go to the backend and do what
requires to be done (delete, rename, table or field, etc.).

If you have a good ETL manipulating routine defined, you can create new DB
instead of modifiying the same DB... So you can name your DB with the
version of you app so you know that these DB schema is the same of the app
dal model. Then you adapt you ETL migration routine and you insert your
data into the refactored (or new) DB schema... If you only have testing
data set to manage, you can also, have these data created by your app with
a fixutre of this type :

if db(db.district_state_province).count() == 0:

 db.district_state_province.insert(district_state_province_name_en='Alabama',
         district_state_province_name_fr='Alabama',
         state_province_iso_code='AL',
         country_id=db(db.country.iso_3166_1_alpha_2_code=='US').select(
db.country.id).first().id)
    db.commit()

Below your define table declaration... So, if table is empty, data get
recreate on first request... This can be slow if there a lot of data to be
creating though...

Hope these advices can help you...

I am not doing all of them, but if I were restarting a new project (or I
take time to improve my actual practices), I will adopt this practice.
Particuarly the ETL part...

Finally, about branching, thinking more to it, you could maybe name you DB
to also include branch name, so you create a new DB each time your change
hit the model definition...

The main idea is really to split schema and data in order to have the
greatest flexibility in schema change and not have to write big data
migration script when there is schema change. Having already a base ETL
routine would make the refactoring of the routine simpler... It is an
assomption... But it raises another problem, which is what the structure of
the container of the data that the ETL routine... And I guess that it is
the structure of the previous db schema...

NOTE : ETL = Extract - Transform = Load

Thanks

Richard

On Fri, Nov 27, 2015 at 12:52 PM, Antonio Salazar <asalaza...@gmail.com>
wrote:

> What are the best practices (or personal experiences) when dealing with
> database migrations and source control versioning?
>
> I think database migration is one of the strong points of web2py, but what
> about migrations caused by checking out different branches?
>
> Example:
>
>    - Version A is in production
>    - Version B creates a new field in an existing table, in development
>
> User reports problem in version A. When switching from version C to
> version A, the new field is dropped from the database and its content is
> lost.
>
> --
> Resources:
> - http://web2py.com
> - http://web2py.com/book (Documentation)
> - http://github.com/web2py/web2py (Source code)
> - https://code.google.com/p/web2py/issues/list (Report Issues)
> ---
> You received this message because you are subscribed to the Google Groups
> "web2py-users" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to web2py+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to web2py+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to