640: Admin->Settings->General->Site Settings->Server adds an extra slash to the end of the url.
- Fixed
- Review Board
jeremy*******@gmai***** (Google Code) (Is this you? Claim this profile.) | |
|
|
Dec. 3, 2008 |
What's the URL of the page containing the problem? http://server:8000/admin/settings/general/ What steps will reproduce the problem? 1. Edit the server url on that page 2. After hitting save, there is a slash that I didn't type. 3. Edit a review, and look at the email. What is the expected output? What do you see instead? I expected valid urls in the emails. Instead I see urls like http://server:8000//r/20/ which break. What operating system are you using? What browser? client: windows/firefox server: linux Please provide any additional information below.
I encounter the same behavior. All generated URLs have an extra slash and are thus invalid.
I see this too. Apache loads the pages, but the session is broken so people keep complaining that they have to continuously re-login.
Fixed in r1531.
-
+ Fixed -
- Priority-Medium + Priority-Critical + Component-Settings + Milestone-Release1.0 -
+ chipx86
This is still occurring for us. Example follows (sanitized)... ----------------------------------------------------------- This is an automatically generated e-mail. To reply, visit: http://<review.server>//reviewboard/r/63/ ----------------------------------------------------------- Review request for Rails and josh. Summary ------- blah. blah. blah. This addresses bug --------. http://our.bug.server/-------- Diffs ----- Diff: http://<review.server>//reviewboard/r/63/diff Testing ------- Thanks, Rusty
I went into the Site Configuration and saved it again, and now the whole reviewboard is broken. Something broke! (Error 500) It appears something broke when you tried to go to here. This is either a bug in Review Board or a server configuration error. Please report this to your administrator. I can't seem to get any log details. Best I got with a test instance was: ./manage.py runserver --traceback 0.0.0.0:8000 Validating models... 0 errors found Django version 1.0-rc_1-SVN-unknown, using settings 'reviewboard.settings' Development server is running at http://0.0.0.0:8000/ Quit the server with CONTROL-C. [22/Oct/2008 12:40:07] "GET / HTTP/1.1" 500 526 Help? :(
OK. Not sure where the log files are supposed to be but I found the Debug setting again. Here is the trace. Traceback: File "/var/lib/python-support/python2.5/django/core/handlers/base.py" in get_response 77. request.path_info) File "/var/lib/python-support/python2.5/django/core/urlresolvers.py" in resolve 180. sub_match = pattern.resolve(new_path) File "/var/lib/python-support/python2.5/django/core/urlresolvers.py" in resolve 178. for pattern in self.urlconf_module.urlpatterns: File "/var/lib/python-support/python2.5/django/core/urlresolvers.py" in _get_urlconf_module 197. self._urlconf_module = __import__(self.urlconf_name, {}, {}, ['']) File "/home/rusty/workspace/reviewboard/urls.py" in <module> 24. load_site_config() File "/home/rusty/workspace/reviewboard/admin/siteconfig.py" in load_site_config 105. apply_django_settings(siteconfig, settings_map) File "/home/rusty/workspace/reviewboard/djblets/siteconfig/django_settings.py" in apply_django_settings 153. value = siteconfig.get(key) File "/home/rusty/workspace/reviewboard/djblets/siteconfig/models.py" in get 59. return self.settings.get(key, default) Exception Type: AttributeError at /reviewboard/ Exception Value: 'unicode' object has no attribute 'get'
Very strange, that certainly shouldn't be happening. What revision are you at? Does this still happen if you restart the server?
-
- Fixed + Confirmed
Restarted the apache, cleared memcache, tried the command line dev server. No luck. $ svn info Path: . URL: http://reviewboard.googlecode.com/svn/trunk/reviewboard Repository Root: http://reviewboard.googlecode.com/svn Repository UUID: 5efc13c4-1f27-0410-8691-ff2d1f55687e Revision: 1537 Node Kind: directory Schedule: normal Last Changed Author: chipx86 Last Changed Rev: 1537 Last Changed Date: 2008-10-14 23:48:25 -0700 (Tue, 14 Oct 2008) $ svn info Path: . URL: http://svn.navi.cx/misc/trunk/djblets/djblets Repository Root: http://svn.navi.cx/misc Repository UUID: 9a66fdd2-3ab9-0310-9df6-91dd0304fdbc Revision: 11900 Node Kind: directory Schedule: normal Last Changed Author: chipx86 Last Changed Rev: 11900 Last Changed Date: 2008-10-14 23:12:06 -0700 (Tue, 14 Oct 2008)
Two more things I recommend trying: 1) Go back to Django 1.0 and see if it fixes this problem at all. 2) Run ./manage.py shell and type the following: >>> from djblets.siteconfig.models import SiteConfiguration >>> siteconfig = SiteConfiguration.objects.get_current() >>> print siteconfig.settings Send that to me. There's probably nothing really in there aside from domain names that are sensitive, but if you feel better, you can e-mail me directly with the information. We know there's a problem if it doesn't look like: {stuff here} That is, if it's an empty string or begins/ends with quotes, something went really badly.
We were running r8914 of django (1.0 rc1). I have upgraded to a package from debian(1.0 final), but the error has not changed. Here is the output you requested. I also did a __class__ on it. $ ./manage.py shell Python 2.5.2 (r252:60911, Jul 31 2008, 17:31:22) [GCC 4.2.3 (Ubuntu 4.2.3-2ubuntu7)] on linux2 Type "help", "copyright", "credits" or "license" for more information. (InteractiveConsole) >>> from djblets.siteconfig.models import SiteConfiguration >>> siteconfig = SiteConfiguration.objects.get_current() >>> print siteconfig.settings {u'mail_host_password': u'', u'cache_backend': u'locmem:///', u'diffviewer_show_trailing_whitespace': True, u'site_upload_temp_dir': None, u'locale_datetime_format': u'N j, Y, P', u'auth_ldap_tls': False, u'mail_host_user': u'', u'locale_year_month_format': u'F Y', u'auth_ldap_uid_mask': u'uid=%s,ou=users,dc=example,dc=com', u'mail_server_address': u'root@localhost', u'auth_ldap_uri': u'', u'diffviewer_context_num_lines': 5, u'diffviewer_paginate_orphans': 10, u'mail_send_review_mail': True, u'site_media_root': u'/home/rusty/workspace/reviewboard/htdocs/media', u'locale_language_code': u'en-us', u'auth_nis_email_domain': u'', u'search_index_file': u'/home/rusty/workspace/reviewboard/searchindex', u'auth_ldap_anon_bind_passwd': u'', u'site_prepend_www': False, u'auth_ldap_anon_bind_uid': u'', u'mail_port': 25, u'locale_month_day_format': u'F j', u'locale_time_format': u'P', u'locale_date_format': u'N j, Y', u'auth_ldap_email_domain': u'', u'search_enable': True, u'mail_default_from': u'webmaster@localhost', u'auth_custom_backends': [u''], u'diffviewer_include_space_patterns': [u''], u'mail_use_tls': False, u'site_admin_email': u'test@example.com', u'auth_backend': u'builtin', u'locale_timezone': u'US/Pacific', u'site_domain_method': u'http', u'cache_expiration_time': 2592000, u'diffviewer_paginate_by': 20, u'locale_time_zone': u'US/Pacific', u'auth_require_sitewide_login': False, u'site_upload_max_memory_size': 2621440, u'locale_default_charset': u'utf-8', u'mail_host': u'localhost', u'diffviewer_syntax_highlighting': True, u'site_media_url': u'/reviewboard/media/', u'site_admin_name': u'Test'} >>> siteconfig.settings.__class__ <type 'unicode'>
Hmm.. It's __dict__ here. One of two things is happening. Either somehow the simplejson loading code isn't being executed and you're getting the raw data from the database, or somehow it's represented as a string in the database, causing simplejson to deserialize as a string. A couple more things to try. First, see what happens if, from that shell, you copy the output of that print command and then assign that directly to siteconfig.settings, so we're initializing it as a dict. Then call siteconfig.save(). If that fixes it, that's great. Maybe we'll have to add some protection to make sure it's always a dict in case it somehow gets messed up. If not, the next thing would be to modify JSONField in djblets/util/fields.py and add some debugging to the "loads" function to find out the raw data we're getting in and the raw data we're getting out, and then run the above command in comment 11 again.
ok, printing and resaving the data resolved the issue, but hitting save on the site configuration page causes it to happen again. If you think it might be at the database level, could it be a postgresql specific issue?
It's possible, though I'd hope not. A workaround we can put in place is to check the resulting value from loads in fields.py and, if it's a string, attempt to loads the result of that (catching any errors and discarding that result). At that point we should have something that's valid. Maybe you can try this.. Edit that fields.py file and, in loads, change: return simplejson.loads(s, encoding=settings.DEFAULT_CHARSET) to: value = simplejson.loads(s, encoding=settings.DEFAULT_CHARSET) if isinstance(value, basestring): try: value = simplejson.loads(value, encoding=settings.DEFAULT_CHARSET) except: pass return value See if that does anything useful.