Thanks for your feedback Matthew,

I agree it is a good idea to move GENODE_CLIENT_LOCATION closer to STATIC_URL.

In my projects, I usually rename the geonode static files to 'geonode'
instead of 'static' as I believe it leads to less confusion when
STATIC_URL is '/static/' and adheres more to django conventions, where
the app's static files are under '/media/app_name' and templates are
under '/templates/app_name'.

Are you familiar with submitting patches and pull requests? [1]. We
would love to receive a small patch from you with the proposed changes
to settings.py, I might remember about this thread next time I have
time allotted to improve core but a pull request is harder to miss :)

Thanks for following up and sharing the solution,
Ariel.

[1] http://docs.geonode.org/en/latest/developers/patches.html

On Thu, Feb 16, 2012 at 9:38 AM, Matthew Hanson
<[email protected]> wrote:
> Of course, right when I start thinking it was a bug I should have
> immediately suspected it was my own fault. And also the lack of
> responses here should have clued me in that, since no one seemed to
> have any idea what I was talking about, that it was not a problem with
> GeoNode.   Since I hate finding threads with problems that never get
> resolved in the thread....
>
> I had been trying different settings and got parameters mixed up.   I
> was right about the expected behavior.   The dev server takes the
> STATIC_URL and publishes STATIC_ROOT and STATICFILES_DIRS locations to
> that URL.   There's no settings elsewhere like I had thought (I'm
> still confused as to what egg the egg:GeoNode is referring to in
> shared/dev-paste.ini....there's no egg with that name).     Ariel's
> post had a clue as to the problem, but the source of the problem is in
> the original GeoNode settings.py file and really should be changed.
>
> # GeoNode default settings.py  has these two variables, far away from
> each other in the settings.py file.
> STATIC_URL = "/media/"
> GEONODE_CLIENT_LOCATION = "/media/static/"
>
> Ariel stated:
>
>>>> STATIC_* are for things like css and js
>>>> GEONODE_CLIENT_URL is just there to be able to point to a development
>>>> version of geonode-client, usually maps to a place under STATIC_URL.
>
> However, for the dev version in fact GEONODE_CLIENT_URL *has* to map
> to a place under STATIC_URL...or at least some location that will be
> auto-shared by the dev server.  Presumably this could be media, or
> admin, since those are served as well.     The default settings.py
> should be updated to be like Ariel's.   I'd also suggest moving them
> so STATIC_URL and GEONODE_CLIENT_URL are next to each other in
> settings.py
>
> STATIC_URL = '/media/'
> GEONODE_CLIENT_LOCATION = STATIC_URL + "static/"
>
> which will ensure that the GEONODE_CLIENT_LOCATION is properly served
> by the dev server.   Otherwise if you change STATIC_URL without also
> updating GEONODE_CLIENT_LOCATION those client js and css files will
> become orphans.
>
>
> - m
>
>
>
> On Thu, Feb 16, 2012 at 7:57 AM, Matthew Hanson
> <[email protected]> wrote:
>> I think this is a bug.   When using the default settings.py, the
>> development environment runs fine.
>>
>> If I change STATIC_URL, nothing else, it doesn't serve static files
>> when starting the server.
>>
>> I think it's a bug, but I don't know what the intended behavior is.
>> I'd think that the dev server should read the settings module, then
>> serve the static directoriess to whatever URL is specified in
>> STATIC_URL, so no matter what STATIC_URL is it should work.
>>
>> matt
>>
>>
>> On Wed, Feb 15, 2012 at 3:56 PM, Matthew Hanson
>> <[email protected]> wrote:
>>> Ariel thanks a lot,
>>>
>>> I think I mostly understand Django's media handling, as I've used
>>> Django prior to GeoNode, and don't have a problem with production
>>> deployment.   What I'm having a hard time with now is serving the
>>> static files in the development environment.   Now to be clear, I can
>>> serve static files fine using the default setting for STATIC_URL.
>>> But if I change STATIC_URL to anything else, it fails to work.    Even
>>> if I just add a prefix of http://localhost:8000/ it fails to work.
>>> (in production we may be serving static files from a different
>>> machine)
>>>
>>> STATIC_URL = '/media/'     # original setting, works fine
>>>
>>> STATIC_URL = '/static/'       # fails
>>> STATIC_URL = 'http://localhost:8000/static/     # fails
>>>
>>> The paster host seems to be set up to serve files at the original
>>> setting location (/media/), and I can't find where to change it.   Or
>>> maybe there's something else going on here.
>>>
>>> I also see you included this in your settings:
>>>
>>> STATICFILES_STORAGE = 'staticfiles.storage.StaticFilesStorage'
>>>
>>> which was removed from the settings file in 1.1    Is it required ?
>>>
>>> The relevant section of my settings file is pasted here, and it's
>>> currently configured to work properly, but I would like to change the
>>> names of some directories as well as be able to add an ASSETS_URL
>>> prefix (to point to a different machine)
>>>
>>>
>>> ###########################################################
>>> # Locations of things
>>> ###########################################################
>>>
>>> # Assets include media, static, admin, etc - any static resources
>>> ASSETS_ROOT = os.path.join(PROJECT_ROOT,'media/') #'/var/www/geonode/'
>>> #ASSETS_URL = 'http://localhost:8000/media/'
>>> ASSETS_URL = "/media/"
>>>
>>> # Absolute path to the directory that holds media.
>>> # Example: "/home/media/media.lawrence.com/"
>>> MEDIA_ROOT = os.path.join(ASSETS_ROOT,'media/')
>>> # trailing slash if there is a path component (optional in other cases).
>>> # Examples: "http://media.lawrence.com";, "http://example.com/media/";
>>> MEDIA_URL = ASSETS_URL + 'media/'
>>> GEONODE_UPLOAD_PATH = MEDIA_ROOT
>>>
>>> # Absolute path to the directory that holds static files like app media.
>>> # Example: "/home/media/media.lawrence.com/apps/"
>>> STATIC_ROOT = os.path.join(ASSETS_ROOT,'static/')
>>> # Additional directories which hold static files
>>> STATICFILES_DIRS = (
>>>    os.path.join(PROJECT_ROOT, 'media'),
>>> )
>>> # URL that handles the static files like app media.
>>> # Example: "http://media.lawrence.com";
>>> #STATIC_URL = ASSETS_URL + 'static/'
>>> STATIC_URL = '/media/'
>>> GEONODE_CLIENT_LOCATION = STATIC_URL + "static/"
>>>
>>> # URL prefix for admin media -- CSS, JavaScript and images. Make sure to 
>>> use a
>>> # trailing slash.
>>> # Examples: "http://foo.com/media/";, "/media/".
>>> ADMIN_MEDIA_PREFIX = os.path.join(ASSETS_URL,'admin/')
>>>
>>>
>>> On Wed, Feb 15, 2012 at 3:09 PM, Ariel Nunez <[email protected]> 
>>> wrote:
>>>> Mathew,
>>>>
>>>> I understand how daunting media handling is for Django and especially
>>>> in GeoNode with the additional GEONODE_CLIENT_LOCATION, there is a
>>>> reason for each of those settings but I won't go in detail now (can
>>>> provide links later if needed).
>>>>
>>>> Here is how I configure the settings file in my development projects
>>>> so they are development and production friendly:
>>>>
>>>> MEDIA_ROOT = os.path.join(PROJECT_ROOT, 'static', 'uploaded')
>>>>
>>>> MEDIA_URL = '/uploaded/'
>>>> STATIC_ROOT = os.path.join(PROJECT_ROOT, 'static')
>>>> STATIC_URL = '/static/'
>>>> GEONODE_UPLOAD_PATH = MEDIA_ROOT + 'geonode'
>>>> #GEONODE_CLIENT_LOCATION = 'http://localhost:8080/'
>>>> GEONODE_CLIENT_LOCATION = STATIC_URL + 'geonode/'
>>>> ADMIN_MEDIA_PREFIX = STATIC_URL + 'admin/'
>>>>
>>>> STATICFILES_STORAGE = 'staticfiles.storage.StaticFilesStorage'
>>>>
>>>> # Additional directories which hold static files
>>>> STATICFILES_DIRS = [
>>>>    os.path.join(PROJECT_ROOT, 'media'),
>>>>    os.path.join(GEONODE_ROOT, "media"),
>>>> ]
>>>>
>>>> # URL prefix for admin media -- CSS, JavaScript and images. Make sure to 
>>>> use a
>>>> # trailing slash.
>>>> # Examples: "http://foo.com/media/";, "/media/".
>>>> ADMIN_MEDIA_PREFIX = os.path.join(STATIC_URL, "admin/")
>>>>
>>>>
>>>> For deployment you need to use the: `geonode collectstatic` static
>>>> command (pass it a -v0 flag if you have an error related to printing)
>>>> and that will take care of putting the static files in the right dir
>>>> (usually /var/www/geonode/static ).
>>>>
>>>> MEDIA_* are for user submitted files
>>>> STATIC_* are for things like css and js
>>>> GEONODE_CLIENT_URL is just there to be able to point to a development
>>>> version of geonode-client, usually maps to a place under STATIC_URL.
>>>>
>>>> In my urls.py I do:
>>>>
>>>> from staticfiles.urls import staticfiles_urlpatterns
>>>>
>>>> # Extra static file endpoint for development use
>>>> if settings.SERVE_MEDIA:
>>>>    urlpatterns +=
>>>> [url(r'^static/thumbs/(?P<path>.*)$','django.views.static.serve',{
>>>>        'document_root' : settings.STATIC_ROOT + "/thumbs"
>>>>    })]
>>>>    urlpatterns += 
>>>> [url(r'^uploaded/(?P<path>.*)$','django.views.static.serve',{
>>>>        'document_root' : settings.MEDIA_ROOT
>>>>    })]
>>>>
>>>>    urlpatterns += staticfiles_urlpatterns()
>>>>
>>>> Hope it helps,
>>>> Ariel.
>>>>
>>>> On Wed, Feb 15, 2012 at 1:18 PM, Matthew Hanson
>>>> <[email protected]> wrote:
>>>>> Hello there,
>>>>>
>>>>> We've been starting to work with GeoNode here, and this is my first
>>>>> post, although I met some of you at FOSS4G this year.  I'd introduce
>>>>> our project, but right now there is no public site.   We're using
>>>>> GeoNode in a multi-site configuration, which means utilizing the
>>>>> Django Sites framework and tweaking GeoNode to use it.   I've got a
>>>>> basic multi-site config running in Production on Apache, and am trying
>>>>> to get my development environment matched up, however paster, and
>>>>> static and media URL's are giving me some heartburn (I'm using
>>>>> family-friendly language here).
>>>>>
>>>>> The plethora of file location variables is rather daunting:
>>>>> STATIC_URL, STATICFILES_DIR, MEDIA_URL, GEONODE_CLIENT_LOC, ADMIN,
>>>>> etc. and certainly has caused me lots of confusion.    The problem I
>>>>> was having is when I changed STATIC_URL, my development server was
>>>>> unable to find the static files.   With Apache I've got no problem as
>>>>> it's easy enough to change to whatever I wish.  But with paster I'm
>>>>> unable to make any sense out of the shared/dev-paste.ini file.    The
>>>>> syntax in it doesn't match up with the paster online documentation.
>>>>> To be more specific, the app:static config block doesn't set
>>>>> document_root like the documentation says must be provided.   It
>>>>> instead gives
>>>>>
>>>>> egg=GeoNode
>>>>> resource_name=GeoNode/static
>>>>>
>>>>> There's reference to resource_name in paste.urlparser, but no examples
>>>>> of a configuration file using the syntax above.   Obviously paster is
>>>>> setting the server settings somewhere, but I can't for the life of me
>>>>> figure out where.    I just want to be able to change some of my
>>>>> settings variables for locations of things, but seems like the
>>>>> development environment has hardcoded some things somewhere.
>>>>>
>>>>> Any insight?
>>>>>
>>>>> Thanks in advance,
>>>>>
>>>>> Matthew Hanson
>>>>> Applied GeoSolutions
>>>>> http://www.appliedgeosolutions.com

Reply via email to