Do they share the same Database, if not it make no sens that auth_user already exists... Did you modify the welcome app.ini db config? I ask because web2py use welcome as template for new app...
On Thu, Jun 16, 2016 at 12:36 PM, Marty Jones <murtin.jo...@gmail.com> wrote: > The reason I suspect a non-application-specific issue is that creating a > new simple app from the web2py admin console results in a similar database > issue. Visiting the default/index of the new app spits back: > > Traceback (most recent call last): > File "/home/murtyjones/app/gluon/restricted.py", line 227, in restricted > exec ccode in environment > File "/home/murtyjones/app/applications/test_users/models/db.py" > <https://nolabills.com/admin/default/edit/test_users/models/db.py>, line 93, > in <module> > auth.define_tables(username=False, signature=False) > File "/home/murtyjones/app/gluon/tools.py", line 2376, in define_tables > format='%(first_name)s %(last_name)s (%(id)s)')) > File "/home/murtyjones/app/gluon/packages/dal/pydal/base.py", line 576, in > define_table > table = self.lazy_define_table(tablename,*fields,**args) > File "/home/murtyjones/app/gluon/packages/dal/pydal/base.py", line 615, in > lazy_define_table > polymodel=polymodel) > File "/home/murtyjones/app/gluon/packages/dal/pydal/adapters/base.py", line > 768, in create_table > return self.migrator.create_table(*args, **kwargs) > File "/home/murtyjones/app/gluon/packages/dal/pydal/migrator.py", line 269, > in create_table > self.adapter.create_sequence_and_triggers(query, table) > File "/home/murtyjones/app/gluon/packages/dal/pydal/adapters/base.py", line > 820, in create_sequence_and_triggers > self.execute(query) > File "/home/murtyjones/app/gluon/packages/dal/pydal/adapters/__init__.py", > line 68, in wrap > return f(*args, **kwargs) > File "/home/murtyjones/app/gluon/packages/dal/pydal/adapters/base.py", line > 417, in execute > rv = self.cursor.execute(command, *args[1:], **kwargs) > OperationalError: table auth_user already exists > > > > > On Thursday, June 16, 2016 at 12:28:35 PM UTC-4, Richard wrote: >> >> There shouldn't be issue specific to SQLite (I mean it should work >> properly), though there is maybe a specific unnoticed issue with it as >> there has been a big refactoring of pyDAL, I don't recall it the refactored >> pyDAL was present in 2.14.5 >> >> >> >> On Thu, Jun 16, 2016 at 12:22 PM, Marty Jones <murtin...@gmail.com> >> wrote: >> >>> Done - no change. >>> >>> Is it possible that the issue is SQLite specific and I need to migrate >>> to MySQL or some other db? >>> >>> On Thursday, June 16, 2016 at 12:14:51 PM UTC-4, Richard wrote: >>>> >>>> Can you comment out the part of the scheduler, the db lock file may >>>> come from there... >>>> >>>> On Thu, Jun 16, 2016 at 12:05 PM, Marty Jones <murtin...@gmail.com> >>>> wrote: >>>> >>>>> Controller logic is below. Error 1 is occuring under the "dashboard" >>>>> function. Errors 2/3 under the user function. >>>>> >>>>> # -*- coding: utf-8 -*- >>>>> # this file is released under public domain and you can use without >>>>> limitations >>>>> >>>>> >>>>> ############################################################################### >>>>> ## Launch with all settings via "sudo python run_server.py" >>>>> >>>>> ############################################################################### >>>>> >>>>> import operator # needed for manager_status variable >>>>> >>>>> response.title = 'nolabills' >>>>> >>>>> def jspage(): >>>>> link = URL('static', 'main.js') >>>>> return dict(link=link) >>>>> >>>>> def index(): >>>>> """ >>>>> For registered users, redirects to the requests page >>>>> For unregistered users, displays intro message >>>>> """ >>>>> >>>>> signup = URL(a=request.application, c='default', f='user/register') >>>>> >>>>> return dict(is_logged_in=auth.is_logged_in(), signup=signup) >>>>> >>>>> @auth.requires_membership('manager') >>>>> def manage(): >>>>> """ >>>>> This page, accessible by only managers, shows the current employees >>>>> of a company as well as any users who are registering themselves as >>>>> employees of the company. >>>>> From this page a manager can approve a pending user's membership, >>>>> as well as revoke the membership of a user on the current employee >>>>> list. >>>>> """ >>>>> pending_list = [] >>>>> approved_list = [] >>>>> if request.post_vars: >>>>> for each in request.post_vars: >>>>> key = request.post_vars.keys()[0] >>>>> underscore = key.find('_') >>>>> id = key[0:underscore] >>>>> change = key[underscore+1:len(key)] >>>>> change = None if change == "approve" else "unapproved" >>>>> # modify db accordingly >>>>> record = db(db.auth_user.id==id).select().first() >>>>> record.registration_key=change >>>>> record.update_record() >>>>> >>>>> for row in db().select(): >>>>> #for row in db(db.auth_user.company==auth.user.company).select(): >>>>> if row.registration_key: # if pending approval by manager >>>>> pending_list.append({row.id: >>>>> {"first":row.first_name,"last":row.last_name}}) >>>>> else: >>>>> manager_status = auth.has_membership('manager', row.id) >>>>> approved_list.append({row.id: >>>>> {"first":row.first_name,"last":row.last_name,"manager_status":manager_status}}) >>>>> return dict(pending_list=pending_list, approved_list=approved_list) >>>>> >>>>> @auth.requires_login() >>>>> def dashboard(): >>>>> """ >>>>> This page allows a user to send an email to >>>>> a potential customer, requesting access to bill data >>>>> """ >>>>> i = 0 >>>>> already_submitted = False # default is false; can only be changed >>>>> if request.post_vars == True >>>>> >>>>> # SQLFORM version >>>>> data_requests = >>>>> SQLFORM.grid(db(db.data_requests.company==auth.user.company), >>>>> fields=[db.data_requests.last_name, \ >>>>> db.data_requests.first_name, \ >>>>> db.data_requests.email, \ >>>>> db.data_requests.status, \ >>>>> db.data_requests.bill_1, >>>>> ], >>>>> headers={'data_requests.bill_1':'Most >>>>> Recent Bill'}, >>>>> sortable=False, >>>>> create=False, >>>>> editable=False, >>>>> deletable=True, >>>>> details=False, >>>>> maxtextlength=30, >>>>> csv=False, >>>>> upload=URL('download'), >>>>> ) >>>>> >>>>> pending_list = db().select(db.data_requests.email) >>>>> # if a new request has been made, update the database >>>>> if request.post_vars: >>>>> >>>>> while not already_submitted and i <= len(data_requests): >>>>> already_submitted = [True for row in pending_list if >>>>> row.email == request.post_vars.email] >>>>> i += 1 >>>>> >>>>> from entergy_scraper import download >>>>> from mailer import send_request >>>>> >>>>> if not already_submitted: >>>>> # generate token >>>>> import random, base64, sha >>>>> token = >>>>> base64.b64encode(sha.sha(str(random.random())).hexdigest())[:8] >>>>> db.tokens.insert(token = token, >>>>> first_name = request.post_vars.first_name, >>>>> last_name = request.post_vars.last_name, >>>>> email = request.post_vars.email, >>>>> company = auth.user.company, >>>>> ) >>>>> >>>>> # send request to user >>>>> db.scheduler_task.insert(status = 'QUEUED', >>>>> application_name = >>>>> request.application+'/default', >>>>> task_name = 'request', >>>>> group_name = 'email', >>>>> function_name = 'send_request', >>>>> args = '["{0}", "{1}", "{2}", >>>>> "{3}"]'.format( \ >>>>> request.post_vars.first, >>>>> request.post_vars.last, request.post_vars.email, token), >>>>> vars = '{}', >>>>> enabled = True, >>>>> start_time = request.now, >>>>> timeout = 500, # should take less >>>>> than 500 secs >>>>> ) >>>>> # update data_requests to show that the task is >>>>> AWAITING_CUSTOMER >>>>> db.data_requests.insert(first_name = >>>>> request.post_vars.first_name, >>>>> last_name = >>>>> request.post_vars.last_name, >>>>> email = request.post_vars.email, >>>>> company = auth.user.company, >>>>> status = 'AWAITING_CUSTOMER', >>>>> ) >>>>> >>>>> >>>>> return dict(already_submitted=already_submitted, >>>>> data_requests=data_requests, pending_list=pending_list) >>>>> >>>>> def approve_request(): >>>>> """ >>>>> Allows a customer to approve a data request >>>>> """ >>>>> submitted = 'submitted' >>>>> valid_token = 'valid_token' >>>>> invalid_token = 'invalid_token' >>>>> >>>>> >>>>> # if the user has submitted their data and it's not already in the >>>>> database, let them know we'll get their data >>>>> if request.post_vars: >>>>> status = submitted >>>>> >>>>> token_submitted = True if db(db.data_requests.email == >>>>> request.post_vars.email).select(db.tokens.submitted).first() else False >>>>> >>>>> if token_submitted == False: >>>>> # download data >>>>> db.data_requests.insert(first_name = >>>>> request.post_vars.first_name, >>>>> last_name = >>>>> request.post_vars.last_name, >>>>> email = request.post_vars.email, >>>>> company = auth.user.company, >>>>> energy_username = >>>>> request.post_vars.energy_username, >>>>> energy_password = >>>>> request.post_vars.energy_password, >>>>> ) >>>>> >>>>> # if no submission of info, try to give them the option to do so >>>>> else: >>>>> try: >>>>> status = valid_token >>>>> token = request.get_vars.token >>>>> token_row = db(db.tokens.token == token).select().first() >>>>> first_name = token_row.first_name >>>>> last_name = token_row.last_name >>>>> email = token_row.email >>>>> except: >>>>> status = invalid_token >>>>> >>>>> if status == submitted or status == invalid_token: >>>>> return dict(status=status, submitted=submitted, >>>>> invalid_token=invalid_token, token_submitted=token_submitted) >>>>> else: >>>>> return dict(status=status, first_name=first_name, >>>>> last_name=last_name, email=email, submitted=False, invalid_token=False, >>>>> token_submitted=False) >>>>> >>>>> def user(): >>>>> """ >>>>> exposes: >>>>> http://..../[app]/default/user/login >>>>> http://..../[app]/default/user/logout >>>>> http://..../[app]/default/user/register >>>>> http://..../[app]/default/user/profile >>>>> http://..../[app]/default/user/retrieve_password >>>>> http://..../[app]/default/user/change_password >>>>> http://..../[app]/default/user/bulk_register >>>>> use @auth.requires_login() >>>>> @auth.requires_membership('group name') >>>>> @auth.requires_permission('read','table name',record_id) >>>>> to decorate functions that need access control >>>>> also notice there is http://..../[app]/appadmin/manage/auth to >>>>> allow administrator to manage users >>>>> """ >>>>> return dict(form=auth()) >>>>> >>>>> @cache.action() >>>>> def download(): >>>>> """ >>>>> allows downloading of uploaded files >>>>> http://..../[app]/default/download/[filename] >>>>> """ >>>>> return response.download(request, db) >>>>> >>>>> def call(): >>>>> """ >>>>> exposes services. for example: >>>>> http://..../[app]/default/call/jsonrpc >>>>> decorate with @services.jsonrpc the functions to expose >>>>> supports xml, json, xmlrpc, jsonrpc, amfrpc, rss, csv >>>>> """ >>>>> return service() >>>>> >>>>> >>>>> >>>>> On Thursday, June 16, 2016 at 9:36:18 AM UTC-4, Marty Jones wrote: >>>>> >>>>>> I uploaded a local application to my DigitalOcean droplet and have >>>>>> been having a nightmare of a time with the databases. I get this variety >>>>>> of >>>>>> errors on various pages: >>>>>> >>>>>> *Error 1:* >>>>>> >>>>>> Traceback (most recent call last): >>>>>> File "/home/murtyjones/app/gluon/restricted.py", line 227, in >>>>>> restricted >>>>>> exec ccode in environment >>>>>> File >>>>>> "/home/murtyjones/app/applications/nolabills/controllers/default.py" >>>>>> <https://nolabills.com/admin/default/edit/nolabills/controllers/default.py>, >>>>>> line 230, in <module> >>>>>> File "/home/murtyjones/app/gluon/globals.py", line 417, in <lambda> >>>>>> self._caller = lambda f: f() >>>>>> File "/home/murtyjones/app/gluon/tools.py", line 4241, in f >>>>>> return action(*a, **b) >>>>>> File >>>>>> "/home/murtyjones/app/applications/nolabills/controllers/default.py" >>>>>> <https://nolabills.com/admin/default/edit/nolabills/controllers/default.py>, >>>>>> line 73, in dashboard >>>>>> data_requests = >>>>>> SQLFORM.grid(db(db.data_requests.company==auth.user.company), >>>>>> File "/home/murtyjones/app/gluon/packages/dal/pydal/objects.py", line >>>>>> 91, in __getattr__ >>>>>> raise AttributeError >>>>>> AttributeError >>>>>> >>>>>> >>>>>> *Error 2 (trying to apply changes as a user to own profile):* >>>>>> >>>>>> Traceback (most recent call last): >>>>>> File "/home/murtyjones/app/gluon/restricted.py", line 227, in >>>>>> restricted >>>>>> exec ccode in environment >>>>>> File >>>>>> "/home/murtyjones/app/applications/nolabills/controllers/default.py" >>>>>> <https://nolabills.com/admin/default/edit/nolabills/controllers/default.py>, >>>>>> line 230, in <module> >>>>>> File "/home/murtyjones/app/gluon/globals.py", line 417, in <lambda> >>>>>> self._caller = lambda f: f() >>>>>> File >>>>>> "/home/murtyjones/app/applications/nolabills/controllers/default.py" >>>>>> <https://nolabills.com/admin/default/edit/nolabills/controllers/default.py>, >>>>>> line 211, in user >>>>>> return dict(form=auth()) >>>>>> File "/home/murtyjones/app/gluon/tools.py", line 1941, in __call__ >>>>>> return getattr(self, args[0])() >>>>>> File "/home/murtyjones/app/gluon/tools.py", line 4026, in profile >>>>>> hideerror=self.settings.hideerror): >>>>>> File "/home/murtyjones/app/gluon/sqlhtml.py", line 1744, in accepts >>>>>> self.id_field_name]).update(**fields) >>>>>> File "/home/murtyjones/app/gluon/packages/dal/pydal/objects.py", line >>>>>> 2041, in update >>>>>> ret = db._adapter.update("%s" % table._tablename, self.query, fields) >>>>>> File "/home/murtyjones/app/gluon/packages/dal/pydal/adapters/base.py", >>>>>> line 519, in update >>>>>> raise e >>>>>> OperationalError: attempt to write a readonly database >>>>>> >>>>>> >>>>>> *Error 3 (trying to logout as a user):* >>>>>> >>>>>> Traceback (most recent call last): >>>>>> File "/home/murtyjones/app/gluon/restricted.py", line 227, in >>>>>> restricted >>>>>> exec ccode in environment >>>>>> File >>>>>> "/home/murtyjones/app/applications/nolabills/controllers/default.py" >>>>>> <https://nolabills.com/admin/default/edit/nolabills/controllers/default.py>, >>>>>> line 230, in <module> >>>>>> File "/home/murtyjones/app/gluon/globals.py", line 417, in <lambda> >>>>>> self._caller = lambda f: f() >>>>>> File >>>>>> "/home/murtyjones/app/applications/nolabills/controllers/default.py" >>>>>> <https://nolabills.com/admin/default/edit/nolabills/controllers/default.py>, >>>>>> line 211, in user >>>>>> return dict(form=auth()) >>>>>> File "/home/murtyjones/app/gluon/tools.py", line 1941, in __call__ >>>>>> return getattr(self, args[0])() >>>>>> File "/home/murtyjones/app/gluon/tools.py", line 3235, in logout >>>>>> self.log_event(log, self.user) >>>>>> File "/home/murtyjones/app/gluon/tools.py", line 2530, in log_event >>>>>> self.table_event().insert(description=str(description % vars), >>>>>> origin=origin, user_id=user_id) >>>>>> File "/home/murtyjones/app/gluon/packages/dal/pydal/objects.py", line >>>>>> 740, in insert >>>>>> ret = self._db._adapter.insert(self, self._listify(fields)) >>>>>> File "/home/murtyjones/app/gluon/packages/dal/pydal/adapters/base.py", >>>>>> line 482, in insert >>>>>> raise e >>>>>> IntegrityError: FOREIGN KEY constraint failed >>>>>> >>>>>> >>>>>> *db.py* >>>>>> ## app configuration made easy. Look inside private/appconfig.ini >>>>>> from gluon.contrib.appconfig import AppConfig >>>>>> ## import current for current.db = db line >>>>>> from gluon import current >>>>>> >>>>>> ## once in production, remove reload=True to gain full speed >>>>>> myconf = AppConfig(reload=True) >>>>>> >>>>>> ## if NOT running on Google App Engine use SQLite or other DB >>>>>> db = DAL(myconf.take('db.uri'), pool_size=myconf.take('db.pool_size', >>>>>> cast=int), migrate_enabled = myconf.get('db.migrate'), >>>>>> check_reserved=['all']) >>>>>> >>>>>> ## define current.db for module usage >>>>>> current.db = db >>>>>> >>>>>> ## by default give a view/generic.extension to all actions from >>>>>> localhost >>>>>> ## none otherwise. a pattern can be 'controller/function.extension' >>>>>> response.generic_patterns = ['*'] if request.is_local else [] >>>>>> ## choose a style for forms >>>>>> response.formstyle = myconf.take('forms.formstyle') # or >>>>>> 'bootstrap3_stacked' or 'bootstrap2' or other >>>>>> response.form_label_separator = myconf.take('forms.separator') >>>>>> >>>>>> from gluon.tools import Auth, Service, PluginManager >>>>>> >>>>>> auth = Auth(db) >>>>>> service = Service() >>>>>> plugins = PluginManager() >>>>>> >>>>>> auth.settings.extra_fields['auth_user']= [ >>>>>> Field('company'), >>>>>> ] >>>>>> >>>>>> ## create all tables needed by auth if not custom tables >>>>>> auth.define_tables(username=False, signature=False, migrate=True, >>>>>> fake_migrate=True) >>>>>> >>>>>> ## configure email >>>>>> mail = auth.settings.mailer >>>>>> mail.settings.server = 'smtp.gmail.com' >>>>>> mail.settings.sender = 'em...@gmail.com' >>>>>> mail.settings.login = 'em...@gmail.com:password' >>>>>> >>>>>> ## configure auth policy >>>>>> auth.settings.registration_requires_verification = True >>>>>> auth.settings.registration_requires_approval = True >>>>>> auth.settings.reset_password_requires_verification = True >>>>>> >>>>>> ## after defining tables, uncomment below to enable auditing >>>>>> # auth.enable_record_versioning(db) >>>>>> >>>>>> >>>>>> ## create list of companies for which this is available >>>>>> db.define_table('company_info', >>>>>> Field('name'), >>>>>> Field('street_address'), >>>>>> ) >>>>>> >>>>>> ## create a table for the queue of not yet fulfilled data requests >>>>>> db.define_table('data_requests', >>>>>> Field('first_name'), >>>>>> Field('last_name'), >>>>>> Field('entergy_username'), >>>>>> Field('entergy_password'), >>>>>> Field('email'), >>>>>> Field('company'), >>>>>> Field('status', default='QUEUED'), >>>>>> Field('runs', 'integer', default=0), >>>>>> Field('bill_1', 'upload', uploadfield='bill_1_file'), >>>>>> Field('bill_1_file', 'blob'), >>>>>> ) >>>>>> >>>>>> >>>>>> ## create a table for generating tokens >>>>>> db.define_table('tokens', >>>>>> Field('first_name'), >>>>>> Field('last_name'), >>>>>> Field('email'), >>>>>> Field('company'), >>>>>> Field('token'), >>>>>> Field('submitted', default=False), >>>>>> ) >>>>>> >>>>>> >>>>>> >>>>>> *sql.log* >>>>>> timestamp: 2016-06-15T14:20:52.811948 >>>>>> CREATE TABLE auth_user( >>>>>> id INTEGER PRIMARY KEY AUTOINCREMENT, >>>>>> first_name CHAR(128), >>>>>> last_name CHAR(128), >>>>>> email CHAR(512), >>>>>> password CHAR(512), >>>>>> registration_key CHAR(512), >>>>>> reset_password_key CHAR(512), >>>>>> registration_id CHAR(512) >>>>>> ); >>>>>> success! >>>>>> timestamp: 2016-06-15T14:20:52.856816 >>>>>> CREATE TABLE auth_group( >>>>>> id INTEGER PRIMARY KEY AUTOINCREMENT, >>>>>> role CHAR(512), >>>>>> description TEXT >>>>>> ); >>>>>> success! >>>>>> timestamp: 2016-06-15T14:20:52.899975 >>>>>> CREATE TABLE auth_membership( >>>>>> id INTEGER PRIMARY KEY AUTOINCREMENT, >>>>>> user_id INTEGER REFERENCES auth_user (id) ON DELETE CASCADE , >>>>>> group_id INTEGER REFERENCES auth_group (id) ON DELETE CASCADE >>>>>> ); >>>>>> success! >>>>>> timestamp: 2016-06-15T14:20:53.040386 >>>>>> CREATE TABLE auth_permission( >>>>>> id INTEGER PRIMARY KEY AUTOINCREMENT, >>>>>> group_id INTEGER REFERENCES auth_group (id) ON DELETE CASCADE , >>>>>> name CHAR(512), >>>>>> table_name CHAR(512), >>>>>> record_id INTEGER >>>>>> ); >>>>>> success! >>>>>> timestamp: 2016-06-15T14:20:53.092848 >>>>>> CREATE TABLE auth_event( >>>>>> id INTEGER PRIMARY KEY AUTOINCREMENT, >>>>>> time_stamp TIMESTAMP, >>>>>> client_ip CHAR(512), >>>>>> user_id INTEGER REFERENCES auth_user (id) ON DELETE CASCADE , >>>>>> origin CHAR(512), >>>>>> description TEXT >>>>>> ); >>>>>> success! >>>>>> timestamp: 2016-06-15T14:20:53.223004 >>>>>> CREATE TABLE auth_cas( >>>>>> id INTEGER PRIMARY KEY AUTOINCREMENT, >>>>>> user_id INTEGER REFERENCES auth_user (id) ON DELETE CASCADE , >>>>>> created_on TIMESTAMP, >>>>>> service CHAR(512), >>>>>> ticket CHAR(512), >>>>>> renew CHAR(1) >>>>>> ); >>>>>> success! >>>>>> timestamp: 2016-06-15T14:22:53.166163 >>>>>> ALTER TABLE auth_user ADD company CHAR(512); >>>>>> success! >>>>>> timestamp: 2016-06-15T14:22:53.554653 >>>>>> CREATE TABLE company_info( >>>>>> id INTEGER PRIMARY KEY AUTOINCREMENT, >>>>>> name CHAR(512), >>>>>> street_address CHAR(512) >>>>>> ); >>>>>> success! >>>>>> timestamp: 2016-06-15T14:22:53.604055 >>>>>> CREATE TABLE data_requests( >>>>>> id INTEGER PRIMARY KEY AUTOINCREMENT, >>>>>> first_name CHAR(512), >>>>>> last_name CHAR(512), >>>>>> entergy_username CHAR(512), >>>>>> entergy_password CHAR(512), >>>>>> email CHAR(512), >>>>>> company CHAR(512), >>>>>> status CHAR(512), >>>>>> runs INTEGER, >>>>>> bill_1 CHAR(512), >>>>>> bill_1_file BLOB >>>>>> ); >>>>>> success! >>>>>> timestamp: 2016-06-15T14:22:53.645905 >>>>>> CREATE TABLE tokens( >>>>>> id INTEGER PRIMARY KEY AUTOINCREMENT, >>>>>> first_name CHAR(512), >>>>>> last_name CHAR(512), >>>>>> email CHAR(512), >>>>>> company CHAR(512), >>>>>> token CHAR(512), >>>>>> submitted CHAR(512) >>>>>> ); >>>>>> success! >>>>>> timestamp: 2016-06-15T14:22:56.435830 >>>>>> CREATE TABLE scheduler_task( >>>>>> id INTEGER PRIMARY KEY AUTOINCREMENT, >>>>>> application_name CHAR(512), >>>>>> task_name CHAR(512), >>>>>> group_name CHAR(512), >>>>>> status CHAR(512), >>>>>> function_name CHAR(512), >>>>>> uuid CHAR(255) UNIQUE, >>>>>> args TEXT, >>>>>> vars TEXT, >>>>>> enabled CHAR(1), >>>>>> start_time TIMESTAMP, >>>>>> next_run_time TIMESTAMP, >>>>>> stop_time TIMESTAMP, >>>>>> repeats INTEGER, >>>>>> retry_failed INTEGER, >>>>>> period INTEGER, >>>>>> prevent_drift CHAR(1), >>>>>> timeout INTEGER, >>>>>> sync_output INTEGER, >>>>>> times_run INTEGER, >>>>>> times_failed INTEGER, >>>>>> last_run_time TIMESTAMP, >>>>>> assigned_worker_name CHAR(512) >>>>>> ); >>>>>> success! >>>>>> timestamp: 2016-06-15T14:22:56.501649 >>>>>> CREATE TABLE scheduler_run( >>>>>> id INTEGER PRIMARY KEY AUTOINCREMENT, >>>>>> task_id INTEGER REFERENCES scheduler_task (id) ON DELETE CASCADE >>>>>> , >>>>>> status CHAR(512), >>>>>> start_time TIMESTAMP, >>>>>> stop_time TIMESTAMP, >>>>>> run_output TEXT, >>>>>> run_result TEXT, >>>>>> traceback TEXT, >>>>>> worker_name CHAR(512) >>>>>> ); >>>>>> success! >>>>>> timestamp: 2016-06-15T14:22:56.546304 >>>>>> CREATE TABLE scheduler_worker( >>>>>> id INTEGER PRIMARY KEY AUTOINCREMENT, >>>>>> worker_name CHAR(255) UNIQUE, >>>>>> first_heartbeat TIMESTAMP, >>>>>> last_heartbeat TIMESTAMP, >>>>>> status CHAR(512), >>>>>> is_ticker CHAR(1), >>>>>> group_names TEXT, >>>>>> worker_stats TEXT >>>>>> ); >>>>>> success! >>>>>> timestamp: 2016-06-15T14:22:56.589493 >>>>>> CREATE TABLE scheduler_task_deps( >>>>>> id INTEGER PRIMARY KEY AUTOINCREMENT, >>>>>> job_name CHAR(512), >>>>>> task_parent INTEGER, >>>>>> task_child INTEGER REFERENCES scheduler_task (id) ON DELETE >>>>>> CASCADE , >>>>>> can_visit CHAR(1) >>>>>> ); >>>>>> success! >>>>>> >>>>>> No idea where to even start with this and would appreciate help. >>>>>> >>>>>> -- >>>>> 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+un...@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+un...@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. > -- 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.