It seems then like it converts everything to lower case in the .table file if you create it from scratch but if you run a fake_migrate then it doesn't convert to lower case. Just appears (on the surface) that it is inconsistent behavior. I've been a camel-case guy since my powerbuilder days back in the 90s and it's one habit I've yet to break. And now I have a pile of code that using it so I'm kinda stuck with this app. I know, shame on me.
Massimo, if you get the time could you weigh in on this? -Jim On Tuesday, October 30, 2012 9:50:33 AM UTC-5, Niphlod wrote: > > this is a question for Massimo, although ... we know your test is on > ubuntu, but your production is on linux too ? > > PS: I see a comment like this in DAL > # make sure all field names are lower case to avoid > # migrations because of case cahnge > > so it's likely that those differencies won't trigger a migration. > The "issue" is: where the system defined tables "with camelcase" the > fields are accessible by camelcase pointers only and where it is all lower > they are accessible only with lower names ? > It would be an error to have a code working with > db.district.includeinaraging > in one instance and patch it to work on another instance to > db.district.includeInArAging > > On Tuesday, October 30, 2012 3:30:07 PM UTC+1, Jim S wrote: >> >> Ok, now adding on to this situation. >> >> In my db.py I have the following defined: >> >> district = db.define_table('district', >> Field('districtId', 'id', readable=False), >> Field('district', length=5, required=True, unique=True), >> Field('districtNumber', 'integer', required=True, >> unique=True, label='District Number'), >> Field('name', length=50, required=True, unique=True), >> Field('salesmanId', db.auth_user, required=True, >> label='District Manager'), >> Field('includeInArAging', 'boolean', required=True, >> label='Include in A/R Aging'), >> Field('regionNumber', 'integer', label='Region Number'), >> Field('manager', >> compute=lambda id: '%s - %s' % (id.district, >> db.auth_user(id.salesmanId).firstLast)), >> format='%(manager)s') >> >> district.salesmanId.represent = db.auth_user.first_name >> district.district.requires = [IS_NOT_EMPTY(), >> IS_NOT_IN_DB(db, 'district.district'), >> IS_UPPER()] >> district.districtNumber.requires = [IS_NOT_EMPTY(), >> IS_NOT_IN_DB(db, 'district.districtNumber')] >> district.name.requires = [IS_NOT_EMPTY(), >> IS_NOT_IN_DB(db, 'district.name')] >> district.salesmanId.requires = IS_IN_DB(db, db.auth_user, >> '%(lastFirst)s', >> zero='.choose.') >> district._plural = 'Districts' >> >> On my test machine I used a MySQL database hosted on an ubuntu box. >> >> On my production machine (where I ran the fake_migrate last week) I'm >> using the same setup. Looking in the databases directory for my app on >> each server I see that the field names are all lower case on my test >> machine, but mixed case on my production machine (where the fake_migrate >> was run). I've attached the two .table files. Is this an oversite on >> web2py's part or something I have setup wrong that has caused the >> case-confusion between my environments? >> >> >> On Tue, Oct 23, 2012 at 5:12 PM, Niphlod <nip...@gmail.com> wrote: >> >>> yep, that can cause troubles. >>> table files are named with an hash composed with the uri string, so you >>> can import, let's say, table definitions for 10 dbs all in the same folder. >>> If table files were created with an uri, and you try to auto_import with >>> another uri, web2py will "search" for the "wrong" filenames. >>> >>> >>> On Wednesday, October 24, 2012 12:08:25 AM UTC+2, Jim S wrote: >>> >>>> Found it. I had inconsistent case specified in my database name. When >>>> running in web2py it was infoCenter2, when running outside, I had >>>> infocenter2. Changing to infoCenter2 caused it to work correctly. >>>> >>>> Niphlod - Thanks for all the help. I truly appreciate it. >>>> >>>> -Jim >>>> >>>> On Tue, Oct 23, 2012 at 4:46 PM, Jim Steil <ato....@gmail.com> wrote: >>>> >>>>> Ok, I've got it now to where there are files in the databases >>>>> directory, but still getting empty list for print db.tables >>>>> >>>>> -Jim >>>>> >>>>> On Tue, Oct 23, 2012 at 4:21 PM, Niphlod <nip...@gmail.com> wrote: >>>>> >>>>>> auto_import scans the table files for tables. That's the whole point >>>>>> of not redefining models (because they are stored in table files that >>>>>> can >>>>>> be read). >>>>>> Normal behaviour is: >>>>>> DAL(..., migrate=True) >>>>>> let it define tables, then >>>>>> DAL(, migrate=False) #or migrate_enabled=False >>>>>> so table files are never touched again, and can be imported. >>>>>> PS: big_id isn't saved into table definitions, so you must specify >>>>>> that parameter also outside (and it's safe I guess turning migrations >>>>>> off >>>>>> also for external access). >>>>>> >>>>>> To solve your problem, try one round of >>>>>> DAL(..,migrate_enabled=False, fake_migrate_all=True) >>>>>> fake_migrate_all will fake all table creations and generates the >>>>>> relative .table files (of course you must be sure that your table >>>>>> definitions are synced with your db structure) >>>>>> From then on, you should be able to import them >>>>>> DAL(...,migrate_enabled=False, big_id=True, auto_import=True, >>>>>> folder='...') >>>>>> >>>>>> >>>>>> >>>>>> On Tuesday, October 23, 2012 11:08:04 PM UTC+2, Jim S wrote: >>>>>> >>>>>>> It is empty. >>>>>>> >>>>>>> >>>>>>> On Tue, Oct 23, 2012 at 4:01 PM, Niphlod <nip...@gmail.com> wrote: >>>>>>> >>>>>>>> is your databases folder filled with the .table files relative to >>>>>>>> the tables ? >>>>>>>> >>>>>>>> >>>>>>>> On Tuesday, October 23, 2012 10:57:04 PM UTC+2, Jim S wrote: >>>>>>>>> >>>>>>>>> Hi - I use MySQL for my database. In my production environment >>>>>>>>> I'm specifying the following: >>>>>>>>> >>>>>>>>> db = DAL(infoCenterUtil.getDalString(), migrate=False, >>>>>>>>> migrate_enabled=False, bigint_id=True) >>>>>>>>> >>>>>>>>> On my production machine I'm also trying to use the DAL outside of >>>>>>>>> web2py with the following: >>>>>>>>> >>>>>>>>> import sys >>>>>>>>> sys.path.append('c:/prod/web2py') >>>>>>>>> from gluon import DAL, Field >>>>>>>>> db = DAL('mysql://username:password@server/database',folder= >>>>>>>>> 'c:/prod/web2py/applications/InfoCenter/databases', auto_import= >>>>>>>>> True) >>>>>>>>> >>>>>>>>> print db.tables >>>>>>>>> >>>>>>>>> But, I get an empty list when I print db.tables. On my test >>>>>>>>> machine where all of my auto-migrations happen, it works fine. >>>>>>>>> >>>>>>>>> Am I barking up the wrong tree in thinking that migration has >>>>>>>>> something to do with my problem (print db.tables give empty list). >>>>>>>>> If not, >>>>>>>>> what am I doing wrong? I don't want auto-migrations on my production >>>>>>>>> box. >>>>>>>>> What is the proper way to have no migration on a machine, but allow >>>>>>>>> for >>>>>>>>> DAL outside of web2py? >>>>>>>>> >>>>>>>>> -Jim >>>>>>>>> >>>>>>>> -- >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>> >>>>>>> -- >>>>>> >>>>>> >>>>>> >>>>>> >>>>> >>>>> >>>> -- >>> >>> >>> >>> >> >> --