This seems uncompleted field model definition, no type, no reference
auth.settings.extra_fields['auth_user']= [
Field('company'),
]
I would define company referenced table before the auth_user extra field
definition...
For the other 2 errors, I think controller defaut about ~200+ lines would
be informative of what going on...
Richard
On Thu, Jun 16, 2016 at 11:31 AM, Marty Jones <[email protected]>
wrote:
> See version info below:
>
> 2.14.5-stable+timestamp.2016.04.13.22.22.13
> (Running on Unknown, Python 2.7.6)
>
>
>
> On Thursday, June 16, 2016 at 9:59:58 AM UTC-4, Richard wrote:
>>
>> How did you upgrade ? Which version of web2py (2.14.6)?
>>
>> Richard
>>
>> On Thu, Jun 16, 2016 at 9:36 AM, Marty Jones <[email protected]> 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 = '[email protected]'
>>> mail.settings.login = '[email protected]: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 [email protected].
>>> 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 [email protected].
> 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 [email protected].
For more options, visit https://groups.google.com/d/optout.