Automattic / jetpack

Security, performance, marketing, and design tools — Jetpack is made by WordPress experts to make WP sites safer and faster, and help you grow your traffic.
https://jetpack.com/
Other
1.59k stars 799 forks source link

Preload on, but doesn't generate cache files #25459

Open hirasso opened 2 years ago

hirasso commented 2 years ago

I have activated 'Preload Mode' on one of my sites. Using the plugin WP Control, I started the cron job immediately and looked at my file system. Looking at my wp-content folder, I am seeing two files being created: preload_permalink.txt and preload_mutex.tmp. Inside preload_permalink.txt, I see the plugin counting up a number, followed by the related permalink that is being preloaded.

But if I look at my supercache folder, I don't see any pages being created. Am I understanding preloading wrong? My config:

/*
WP-Cache Config Sample File

See wp-cache.php for author details.
*/

$cache_page_secret = 'xxx';
$wp_cache_debug_username = 'xxx';
$wp_cache_home_path = '/core/';
$wp_cache_slash_check = 1;
$cache_time_interval = 600;
if ( ! defined('WPCACHEHOME') )
    define( 'WPCACHEHOME', WP_CONTENT_DIR . "/plugins/wp-super-cache/" );

$cache_compression = 1;
$cache_enabled = true;
$super_cache_enabled = true;
$cache_max_time = 1800;
//$use_flock = true; // Set it true or false if you know what to use
$cache_path = WP_CONTENT_DIR . '/cache/';
$file_prefix = 'wp-cache-';
$ossdlcdn = 0;

// Array of files that have 'wp-' but should still be cached
$cache_acceptable_files = array( 'wp-comments-popup.php', 'wp-links-opml.php', 'wp-locations.php' );

$cache_rejected_uri = array('wp-.*\\.php', 'index\\.php');
$cache_rejected_user_agent = array ( 0 => 'bot', 1 => 'ia_archive', 2 => 'slurp', 3 => 'crawl', 4 => 'spider', 5 => 'Yandex' );

$cache_rebuild_files = 1;

// Disable the file locking system.
// If you are experiencing problems with clearing or creating cache files
// uncommenting this may help.
$wp_cache_mutex_disabled = 1;

// Just modify it if you have conflicts with semaphores
$sem_id = 1220181150;

if ( '/' != substr($cache_path, -1)) {
    $cache_path .= '/';
}

$wp_cache_mobile = 0;
$wp_cache_mobile_whitelist = 'Stand Alone/QNws';
$wp_cache_mobile_browsers = 'Android, 2.0 MMP, 240x320, AvantGo, BlackBerry, Blazer, Cellphone, Danger, DoCoMo, Elaine/3.0, EudoraWeb, hiptop, IEMobile, iPhone, iPod, KYOCERA/WX310K, LG/U990, MIDP-2.0, MMEF20, MOT-V, NetFront, Newt, Nintendo Wii, Nitro, Nokia, Opera Mini, Palm, Playstation Portable, portalmmm, Proxinet, ProxiNet, SHARP-TQ-GX10, Small, SonyEricsson, Symbian OS, SymbianOS, TS21i-10, UP.Browser, UP.Link, Windows CE, WinWAP';

// change to relocate the supercache plugins directory
$wp_cache_plugins_dir = WPCACHEHOME . 'plugins';
// set to 1 to do garbage collection during normal process shutdown instead of wp-cron
$wp_cache_shutdown_gc = 0;
$wp_super_cache_late_init = 0;

// uncomment the next line to enable advanced debugging features
$wp_super_cache_advanced_debug = 0;
$wp_super_cache_front_page_text = '';
$wp_super_cache_front_page_clear = 0;
$wp_super_cache_front_page_check = 0;
$wp_super_cache_front_page_notification = '0';

$wp_cache_anon_only = 0;
$wp_supercache_cache_list = 0;
$wp_cache_debug_to_file = 0;
$wp_super_cache_debug = 0;
$wp_cache_debug_level = 5;
$wp_cache_debug_ip = '';
$wp_cache_debug_log = '055918bc98cbb53885110cedef376ecc.php';
$wp_cache_debug_email = '';
$wp_cache_pages[ "search" ] = 0;
$wp_cache_pages[ "feed" ] = 0;
$wp_cache_pages[ "category" ] = 0;
$wp_cache_pages[ "home" ] = 0;
$wp_cache_pages[ "frontpage" ] = 0;
$wp_cache_pages[ "tag" ] = 0;
$wp_cache_pages[ "archives" ] = 0;
$wp_cache_pages[ "pages" ] = 0;
$wp_cache_pages[ "single" ] = 0;
$wp_cache_pages[ "author" ] = 0;
$wp_cache_hide_donation = 0;
$wp_cache_not_logged_in = 0;
$wp_cache_clear_on_post_edit = 0;
$wp_cache_hello_world = 0;
$wp_cache_mobile_enabled = 0;
$wp_cache_cron_check = 0;
$wp_cache_mfunc_enabled = 0;
$wp_cache_make_known_anon = 0;
$wp_cache_refresh_single_only = 0;
$wp_cache_mod_rewrite = 0;
$wp_supercache_304 = 1;
$wp_cache_front_page_checks = 0;
$wp_cache_disable_utf8 = 0;
$wp_cache_no_cache_for_get = 0;
$cache_scheduled_time = "00:00";
$wp_cache_preload_interval = 600;
$cache_schedule_type = 'interval';
$wp_cache_preload_posts = 'all';
$wp_cache_preload_on = 1;
$wp_cache_preload_taxonomies = 0;
$wp_cache_preload_email_me = 0;
$wp_cache_preload_email_volume = 'none';
$wp_cache_mobile_prefixes = '';
$cached_direct_pages = array(  );
$wpsc_served_header = false;
$cache_gc_email_me = 0;
$wpsc_save_headers = 0;
$cache_schedule_interval = 'hourly';
$wp_super_cache_comments = 1;
$wpsc_version = 169;

As a note: If I navigate to one of my pages in the frontend, supercache files are bing created just fine.

hirasso commented 2 years ago

I found the problem! I am testing wp-super-cache on a local (MAMP) install, with SSL enabled. I went through the source code in wp-cache.php and temporarily added inline debugging to this line:

$response = wp_remote_get( $url, array('timeout' => 60, 'blocking' => true ) );
var_dump($response);

Turns out that on my local machine, wp_remote_get returned a WP_Error:

object(WP_Error)#797 (3) {
  ["errors"]=>
  array(1) {
    ["http_request_failed"]=>
    array(1) {
      [0]=>
      string(78) "cURL error 60: SSL certificate problem: unable to get local issuer certificate"
    }
  }
  ["error_data"]=>
  array(0) {
  }
  ["additional_data":protected]=>
  array(0) {
  }
}

...so it never finished the request and thus never could create a cache file, either. I think a failing like this isn't being reflected in the wpsc debug log right now, right? I'm sure it would had helped me a lot. I could imagine something like this:

$response = wp_remote_get( $url, array('timeout' => 60, 'blocking' => true ) );
if( !is_wp_error($response) ) {
  wp_cache_debug( "wp_cron_preload_cache: fetched $url", 5 );
} else {
  wp_cache_debug( "wp_cron_preload_cache: error fetching $url", 5 );
}
donnchawp commented 2 years ago

Glad you debugged that. Good idea on checking wp_remote_get!