dfischer / meteor-prerenderio

A meteor wrapper for https://prerender.io/
57 stars 9 forks source link

Meteor 1.4 #29

Open rschlack opened 8 years ago

rschlack commented 8 years ago

Should this package work for Meteor 1.4? If not, does anyone know how to get prerender working with 1.4? I'm getting 504 errors loading minified stylesheets.

dfischer commented 8 years ago

Sorry I haven't tested it with 1.4 and sadly not really keeping this up to date anymore. If you have a solution I'll happily accept a PR.

s7dhansh commented 7 years ago

Meteor 1.4 has made it super simple. Ideally, this should work:

server.js

Meteor.startup(() => {
    const prerenderio = require("prerender-node");
    const settings = Meteor.settings.PrerenderIO;

    if ((settings || {}).token) {
        prerenderio.set("prerenderToken", settings.token);
        if (settings.prerenderServiceUrl) prerenderio.set("prerenderServiceUrl", settings.prerenderServiceUrl);
      if (settings.protocol) prerenderio.set('protocol', settings.protocol);
      prerenderio.set('afterRender', function afterRender(error) {
        if (error) {
          console.log('prerenderio error', error); // eslint-disable-line no-console
          return;
        }
      });
        WebApp.rawConnectHandlers.use(prerenderio);
    }
});

client.html

    <meta name="fragment" content="!">
s7dhansh commented 7 years ago

Since I am using nginx in production, I am trying an nginx way,

upstream index {
  server 127.0.0.1:3051;
}

server {
  listen 80;
  server_name .....;

  location / {
    try_files $uri @prerender;
  }

  location @prerender {
    proxy_set_header X-Prerender-Token aXwmLUBOhz9RqiuKnWUy;

    set $prerender 0;
    if ($http_user_agent ~* "baiduspider|twitterbot|facebookexternalhit|rogerbot|linkedinbot|embedly|quora link preview|showyoubot|outbrain|pinterest|slackbot|vkShare|W3C_Validator") {
        set $prerender 1;
    }
    if ($args ~ "_escaped_fragment_") {
        set $prerender 1;
    }
    if ($http_user_agent ~ "Prerender") {
        set $prerender 0;
    }
    if ($uri ~* "\.(js|css|xml|less|png|jpg|jpeg|gif|pdf|doc|txt|ico|rss|zip|mp3|rar|exe|wmv|doc|avi|ppt|mpg|mpeg|tif|wav|mov|psd|ai|xls|mp4|m4a|swf|dat|dmg|iso|flv|m4v|torrent|ttf|woff|svg|eot)") {
        set $prerender 0;
    }

    #resolve using Google's DNS server to force DNS resolution and prevent caching of IPs
    resolver 8.8.8.8;

    if ($prerender = 1) {
        #setting prerender as a variable forces DNS resolution since nginx caches IPs and doesnt play well with load balancing
        set $prerender "service.prerender.io";
        rewrite .* /$scheme://$host$request_uri? break;
        proxy_pass http://$prerender;
    }
    if ($prerender = 0) {
      proxy_pass              http://index;
    }
    proxy_redirect          off;
    proxy_set_header        Upgrade $http_upgrade;
    proxy_set_header        Connection "upgrade";
  }
}

Source: https://gist.github.com/thoop/8165802

The only problem, I always get the loaders instead of a fully fetched web page. Still trying to find a solution.

glasser commented 7 years ago

Is anyone else seeing this issue? Can they show what the errors look like? This module does appear to work with Meteor 1.4.2.3 for me. That said, it looks like https://github.com/dferber90/meteor-prerender is more up to date!

glasser commented 7 years ago

By the way, it looks like https://github.com/dferber90/meteor-prerender has the same API as this package but uses a newer version of the NPM module which allows it to contain far less code. (Also, with Meteor 1.3+ it's easy to just use the NPM module directly instead of via Atmosphere.)

dfischer commented 7 years ago

Yeah I'm not really maintaining this. If anyone wants to do a PR i'm happy to merge or give collaborator access.