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 | 
