librelist archives

« back to archive

Static, media

Static, media

From:
Matthew Hanson
Date:
2012-02-15 @ 18:18
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

Re: [geonode] Static, media

From:
Ariel Nunez
Date:
2012-02-15 @ 20:09
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
<mhanson@appliedgeosolutions.com> 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

Re: [geonode] Static, media

From:
Matthew Hanson
Date:
2012-02-15 @ 20:56
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 <ingenieroariel@gmail.com> 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
> <mhanson@appliedgeosolutions.com> 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