Jump to:

5450 Posts in 1672 Topics by 1197 members

Customising the CMS

SilverStripe Forums » Customising the CMS » Static publisher, getting it to work (2.4) need help

Moderators: martimiz, Sean, biapar, Willr, Ingo, swaiba, simon_w

Page: 1
Go to End
Author Topic: 2298 Views
  • TF-35Lightning
    Avatar
    Community Member
    137 Posts

    Static publisher, getting it to work (2.4) need help Link to this post

    Hi all,

    I am trying to get the static publisher to work, this is my first time trying to run it.

    I have followed http://doc.silverstripe.org/staticpublisher
    and are using the Single server Caching technique.

    These are the things I have done.

    1/ mysite/_config.php - added
    Object::add_extension("SiteTree", "FilesystemPublisher('cache/', 'html')");

    2/ .htaccess replaced
    RewriteRule .* sapphire/main.php?url=%1&%{QUERY_STRING} [L]
    with
    RewriteRule .* sapphire/static-main.php?url=%1&%{QUERY_STRING} [L]

    3/ Have added the below to the Page.php class file

    // class Page extends SiteTree { stays here is the start of a default class
    class Page extends SiteTree {

       public static $db = array(
       );

       public static $has_one = array(
       );
       
       
    // page classes for static publisher added by t

    /**
    * Return a list of all the pages to cache
    */
    function allPagesToCache() {
    // Get each page type to define its sub-urls
    $urls = array();

    // memory intensive depending on number of pages
    $pages = DataObject::get("SiteTree");

    foreach($pages as $page) {
    $urls = array_merge($urls, (array)$page->subPagesToCache());
    }

    // add any custom URLs which are not SiteTree instances
    $urls[] = "sitemap.xml";

    return $urls;
    }

    /**
    * Get a list of URLs to cache related to this page
    */
    function subPagesToCache() {
    $urls = array();

    // add current page
    $urls[] = $this->Link();

    // cache the RSS feed if comments are enabled
    if ($this->ProvideComments) {
    $urls[] = Director::absoluteBaseURL() . "pagecomment/rss/" . $this->ID;
    }

    return $urls;
    }

    function pagesAffectedByChanges() {
    $urls = $this->subPagesToCache();
    if($p = $this->Parent) $urls = array_merge((array)$urls, (array)$p->subPagesToCache());
    return $urls;
    }

    4/ Run /dev/buildcache?flush=1

    which then gives me:

    ebuilding cache.
    NOTE: Please ensure that this page ends with 'Done!' - if not, then something may have gone wrong.

    Removing stale cache files...
    done.

    Rebuilding cache from 5 urls...

    FilesystemPublisher: Publishing to
    * Publishing page 1/5: /silverstripe/silverstripe-v2.4.0
    * Publishing page 2/5: /silverstripe/silverstripe-v2.4.0/about-us
    * Publishing page 3/5: /silverstripe/silverstripe-v2.4.0/contact-us
    * Publishing page 4/5: /silverstripe/silverstripe-v2.4.0/page-not-found
    * Publishing page 5/5: sitemap.xml
    Rebuilding cache.
    NOTE: Please ensure that this page ends with 'Done!' - if not, then something may have gone wrong.

    There already appears to be a publishing queue running. You can skip warning this by adding ?/&force to the URL.

    5/ I then try access the main silverstripe site and I get these error messages at the top of the page

    Notice: Use of undefined constant BASE_URL - assumed 'BASE_URL' in F:\wamp\www\silverstripe\silverstripe-v2.4.0\sapphire\static-main.php on line 52

    6/ I've checked the cache folders and there is definatley no html file there.

    Any help would be great

  • Pigeon
    Avatar
    Community Member
    243 Posts

    Re: Static publisher, getting it to work (2.4) need help Link to this post

    Hi,

    I think you are getting a little bit confused between static publisher and 2.4s new caching (which dynamically caches parts of pages).

    For static publisher see: http://doc.silverstripe.org/staticpublisher

    You will need an .htaccess file like this: http://open.silverstripe.org/browser/modules/cms/trunk/code/staticpublisher/htaccess_example_rsyncsingleserver

    This forum post might help you too: http://www.silverstripe.org/customising-the-cms/show/263772?start=0#post263776

  • TF-35Lightning
    Avatar
    Community Member
    137 Posts

    Re: Static publisher, getting it to work (2.4) need help Link to this post

    Hi Pigeon thanks for the reply so staticpublisher and Single server Caching are completly seperate things???

  • TF-35Lightning
    Avatar
    Community Member
    137 Posts

    Re: Static publisher, getting it to work (2.4) need help Link to this post

    Pigeon can I please have a look at your htaccess file if you have done what I am trying to do?

    I tried using a .htaccess file such as:

    ### SILVERSTRIPE START ###
    RewriteEngine On
    RewriteBase /silverstripe/silverstripe-v2.4.0
       
    ## CONFIG FOR DEV ENVIRONMENTS
       
    # Cached content - **sitedir** subdirectory
    RewriteCond %{REQUEST_METHOD} ^GET$
    RewriteCond %{QUERY_STRING} ^$
    RewriteCond %{REQUEST_URI} ^/silverstripe-v2.4.0/(.*)$
    RewriteCond %{REQUEST_URI} /silverstripe-v2.4.0/(.*[^/])/?$
    RewriteCond %{DOCUMENT_ROOT}/silverstripe-v2.4.0/cache/%1.html -f
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule .* /silverstripe-v2.4.0/cache/%1.html [L]
       
    # Cached content - homepage
    RewriteCond %{REQUEST_METHOD} ^GET$
    RewriteCond %{QUERY_STRING} ^$
    RewriteCond %{REQUEST_URI} ^/silverstripe-v2.4.0/?$
    RewriteCond /silverstripe-v2.4.0/cache/index.html -f
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule .* /silverstripe-v2.4.0/cache/index.html [L]
             
    ###Original line here, I commented it out for static publisher ###
    #RewriteRule .* sapphire/main.php?url=%1&%{QUERY_STRING} [L]

    RewriteRule .* sapphire/static-main.php?url=%1&%{QUERY_STRING} [L] ###
       

    ### SILVERSTRIPE END ###

    When I do a buildcache?flush=1 it says it has built the cache but no files are showing in the cache etc and I can't click anywhere.

    My silverstripe directory is silverstripe-v2.4.0
    physical.
    E:\wamp\www\silverstripe\silverstripe-v2.4.0

    I access it in browser from http://localhost/silverstripe/silverstripe-v2.4.0/

    Thought it might have been been something to do with pathing but tested it and appears not to be, must be something to do with how I have my file setup.

    Any help would be great

  • Pigeon
    Avatar
    Community Member
    243 Posts

    Re: Static publisher, getting it to work (2.4) need help Link to this post

    My .htaccess looks like this:

    ### SILVERSTRIPE START ###
    <Files *.ss>
    Order deny,allow
    Deny from all
    Allow from 127.0.0.1
    </Files>

    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /

    ## CONFIG FOR TEST/LIVE ENVIRONMENTS

    # Cached content - live webserver
    RewriteCond %{REQUEST_METHOD} ^GET$
    RewriteCond %{QUERY_STRING} ^$
    RewriteCond %{REQUEST_URI} /(.*[^/])/?$
    RewriteCond %{DOCUMENT_ROOT}/cache/%1.html -f
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule .* /cache/%1.html [L]

    # Cached content - homepage
    RewriteCond %{REQUEST_METHOD} ^GET$
    RewriteCond %{QUERY_STRING} ^$
    RewriteCond %{REQUEST_URI} ^/?$
    RewriteCond %{DOCUMENT_ROOT}/cache/index.html -f
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule .* /cache/index.html [L]

    ### Dynamic ###
    RewriteCond %{REQUEST_URI} !(\.gif$)|(\.jpg$)|(\.png$)|(\.css$)|(\.js$)|(\.php$)

    RewriteCond %{REQUEST_URI} ^(.*)$
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule .* sapphire/main.php?url=%1&%{QUERY_STRING} [L]
    </IfModule>
    ### SILVERSTRIPE END ###

    Make sure that chache is writable. You can test the .htaccess is working by adding a .html file there (eg: test.html) and then navigating to domain.com/test/ and see if it loads the html file. if it does, then your issue is with the cache being written, not the htaccess rule

    2298 Views
Page: 1
Go to Top

Want to know more about the company that brought you SilverStripe? Then check out SilverStripe.com

Comments on this website? Please give feedback.