diff options
-rw-r--r-- | docs/source/siteadmin/configuration.rst | 28 | ||||
-rw-r--r-- | mediagoblin.ini | 11 | ||||
-rw-r--r-- | mediagoblin/config_spec.ini | 19 | ||||
-rw-r--r-- | mediagoblin/init/config.py | 47 |
4 files changed, 78 insertions, 27 deletions
diff --git a/docs/source/siteadmin/configuration.rst b/docs/source/siteadmin/configuration.rst index 3da5cdd9..dd0d6cd9 100644 --- a/docs/source/siteadmin/configuration.rst +++ b/docs/source/siteadmin/configuration.rst @@ -109,6 +109,34 @@ they sound like. - email_smtp_user - email_smtp_pass +Changing data directory +----------------------- + +MediaGoblin by default stores your data in wherever ``data_basedir``. +This can be changed by changing the value in your ``mediagoblin.ini`` file +for example:: + + [DEFAULT] + data_basedir = "/var/mediagoblin/user_data" + +For efficiency reasons MediaGoblin doesn't serve these files itself and +instead leaves that to the webserver. You will have to alter the location +to match the path in ``data_basedir``. + +If you use ``lazyserver.sh`` you need to change the ``paste.ini`` file:: + + [app:mediagoblin] + /mgoblin_media = /var/mediagoblin/user_data + +If you use nginx you need to change the config:: + + # Instance specific media: + location /mgoblin_media/ { + alias /var/mediagoblin/user_data; + } + +Once you have done this you will need to move any existing media you had in the +old directory to the new directory so existing media still can be displayed. All other configuration changes ------------------------------- diff --git a/mediagoblin.ini b/mediagoblin.ini index 5e2477a4..7899d7ca 100644 --- a/mediagoblin.ini +++ b/mediagoblin.ini @@ -5,6 +5,11 @@ # It defines types and defaults so it’s a good place to look for documentation # or to find hidden options that we didn’t tell you about. :) +# To chnange the directory you should make sure you change the +# directory in paste.ini and/or your webserver configuration. +#[DEFAULT] +# data_basedir = "/path/to/data/directory" + [mediagoblin] direct_remote_path = /mgoblin_static/ email_sender_address = "notice@mediagoblin.example.org" @@ -24,7 +29,7 @@ allow_registration = true allow_reporting = true ## Uncomment this to put some user-overriding templates here -# local_templates = %(here)s/user_dev/templates/ +# local_templates = %(data_basedir)s/templates/ ## You can set your theme by specifying this (not specifying it will ## use the default theme). Run `gmg assetlink` to apply the change. @@ -37,10 +42,10 @@ allow_reporting = true user_privilege_scheme = "uploader,commenter,reporter" [storage:queuestore] -base_dir = %(here)s/user_dev/media/queue +base_dir = %(data_basedir)s/media/queue [storage:publicstore] -base_dir = %(here)s/user_dev/media/public +base_dir = %(data_basedir)s/media/public base_url = /mgoblin_media/ [celery] diff --git a/mediagoblin/config_spec.ini b/mediagoblin/config_spec.ini index f3f3f7ab..dade8420 100644 --- a/mediagoblin/config_spec.ini +++ b/mediagoblin/config_spec.ini @@ -1,3 +1,6 @@ +[DEFAULT] +data_basedir = %(here)s/user_dev + [mediagoblin] # HTML title of the pages html_title = string(default="GNU MediaGoblin") @@ -13,10 +16,10 @@ sql_engine = string(default="sqlite:///%(here)s/mediagoblin.db") run_migrations = boolean(default=False) # Where temporary files used in processing and etc are kept -workbench_path = string(default="%(here)s/user_dev/media/workbench") +workbench_path = string(default="%(data_basedir)s/media/workbench") # Where to store cryptographic sensible data -crypto_path = string(default="%(here)s/user_dev/crypto") +crypto_path = string(default="%(data_basedir)s/crypto") # Where mediagoblin-builtin static assets are kept direct_remote_path = string(default="/mgoblin_static/") @@ -67,7 +70,7 @@ allow_reporting = boolean(default=True) show_tos = boolean(default=False) # By default not set, but you might want something like: -# "%(here)s/user_dev/templates/" +# "%(data_basedir)s/templates/" local_templates = string() # Whether or not celery is set up via an environment variable or @@ -90,14 +93,14 @@ exif_visible = boolean(default=False) original_date_visible = boolean(default=False) # Theming stuff -theme_install_dir = string(default="%(here)s/user_dev/themes/") +theme_install_dir = string(default="%(data_basedir)s/themes/") theme_web_path = string(default="/theme_static/") -theme_linked_assets_dir = string(default="%(here)s/user_dev/theme_static/") +theme_linked_assets_dir = string(default="%(data_basedir)s/theme_static/") theme = string() # plugin default assets directory plugin_web_path = string(default="/plugin_static/") -plugin_linked_assets_dir = string(default="%(here)s/user_dev/plugin_static/") +plugin_linked_assets_dir = string(default="%(data_basedir)s/plugin_static/") # Default user upload limit (in Mb) upload_limit = integer(default=None) @@ -123,12 +126,12 @@ extensions = string_list(default=list()) [storage:publicstore] storage_class = string(default="mediagoblin.storage.filestorage:BasicFileStorage") -base_dir = string(default="%(here)s/user_dev/media/public") +base_dir = string(default="%(data_basedir)s/media/public") base_url = string(default="/mgoblin_media/") [storage:queuestore] storage_class = string(default="mediagoblin.storage.filestorage:BasicFileStorage") -base_dir = string(default="%(here)s/user_dev/media/queue") +base_dir = string(default="%(data_basedir)s/media/queue") [media:medium] # Dimensions used when creating media display images. diff --git a/mediagoblin/init/config.py b/mediagoblin/init/config.py index 11a91cff..a9189e8d 100644 --- a/mediagoblin/init/config.py +++ b/mediagoblin/init/config.py @@ -14,6 +14,7 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. +import copy import logging import os import pkg_resources @@ -29,16 +30,21 @@ CONFIG_SPEC_PATH = pkg_resources.resource_filename( 'mediagoblin', 'config_spec.ini') -def _setup_defaults(config, config_path): +def _setup_defaults(config, config_path, extra_defaults=None): """ Setup DEFAULTS in a config object from an (absolute) config_path. """ + extra_defaults = extra_defaults or {} + config.setdefault('DEFAULT', {}) config['DEFAULT']['here'] = os.path.dirname(config_path) config['DEFAULT']['__file__'] = config_path + for key, value in extra_defaults.items(): + config['DEFAULT'].setdefault(key, value) + -def read_mediagoblin_config(config_path, config_spec=CONFIG_SPEC_PATH): +def read_mediagoblin_config(config_path, config_spec_path=CONFIG_SPEC_PATH): """ Read a config object from config_path. @@ -54,7 +60,7 @@ def read_mediagoblin_config(config_path, config_spec=CONFIG_SPEC_PATH): Args: - config_path: path to the config file - - config_spec: config file that provides defaults and value types + - config_spec_path: config file that provides defaults and value types for validation / conversion. Defaults to mediagoblin/config_spec.ini Returns: @@ -68,7 +74,20 @@ def read_mediagoblin_config(config_path, config_spec=CONFIG_SPEC_PATH): # we can add their plugin specs to the general config_spec. config = ConfigObj( config_path, - interpolation='ConfigParser') + interpolation="ConfigParser") + + # temporary bootstrap, just setup here and __file__... we'll do this again + _setup_defaults(config, config_path) + + # Now load the main config spec + config_spec = ConfigObj( + config_spec_path, + encoding="UTF8", list_values=False, _inspec=True) + + # Set up extra defaults that will be pushed into the rest of the + # configs. This is a combined extrapolation of defaults based on + mainconfig_defaults = copy.copy(config_spec.get("DEFAULT", {})) + mainconfig_defaults.update(config["DEFAULT"]) plugins = config.get("plugins", {}).keys() plugin_configs = {} @@ -79,11 +98,12 @@ def read_mediagoblin_config(config_path, config_spec=CONFIG_SPEC_PATH): plugin, "config_spec.ini") if not os.path.exists(plugin_config_spec_path): continue - + plugin_config_spec = ConfigObj( plugin_config_spec_path, - encoding='UTF8', list_values=False, _inspec=True) - _setup_defaults(plugin_config_spec, config_path) + encoding="UTF8", list_values=False, _inspec=True) + _setup_defaults( + plugin_config_spec, config_path, mainconfig_defaults) if not "plugin_spec" in plugin_config_spec: continue @@ -94,23 +114,18 @@ def read_mediagoblin_config(config_path, config_spec=CONFIG_SPEC_PATH): _log.warning( "When setting up config section, could not import '%s'" % plugin) - - # Now load the main config spec - config_spec = ConfigObj( - config_spec, - encoding='UTF8', list_values=False, _inspec=True) # append the plugin specific sections of the config spec - config_spec['plugins'] = plugin_configs + config_spec["plugins"] = plugin_configs - _setup_defaults(config_spec, config_path) + _setup_defaults(config_spec, config_path, mainconfig_defaults) config = ConfigObj( config_path, configspec=config_spec, - interpolation='ConfigParser') + interpolation="ConfigParser") - _setup_defaults(config, config_path) + _setup_defaults(config, config_path, mainconfig_defaults) # For now the validator just works with the default functions, # but in the future if we want to add additional validation/configuration |