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