prerender_rails 0.0.8 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +13 -1
- data/lib/prerender_rails.rb +8 -8
- data/prerender_rails.gemspec +1 -1
- data/test/lib/prerender_rails.rb +7 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 89e1c2e1dd21adf5e3825a67ad848b35982ed781
|
4
|
+
data.tar.gz: cdec4ea8f7fa82fc8d6a4922910f09fbb9906be8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 281e4c4a83be7f2bdd50d2817fff311f7fe9c272d939216b436ef81283ba8030ed23bde71521057ca213a7ce2bf022073cd008b2cd94cc4f8e617c96ff195295
|
7
|
+
data.tar.gz: 305173a965270584c6880ce57e9101126ffbdbc0b3bd570574d24070faf3a246285b5f585f2f2fa8a5d787caaae5668803f8433d691f80f177bc4deffab7606b
|
data/README.md
CHANGED
@@ -5,6 +5,8 @@ Are you using backbone, angular, emberjs, etc, but you're unsure about the SEO i
|
|
5
5
|
|
6
6
|
Use this gem to install rails middleware that prerenders a javascript-rendered page using an external service and returns the HTML to the search engine crawler for SEO.
|
7
7
|
|
8
|
+
`Note:` If you are using a `#` in your urls, make sure to change it to `#!`. [View Google's ajax crawling protocol](https://developers.google.com/webmasters/ajax-crawling/docs/getting-started)
|
9
|
+
|
8
10
|
`Note:` Make sure you have more than one webserver thread/process running because the prerender service will make a request to your server to render the HTML.
|
9
11
|
|
10
12
|
Add this line to your application's Gemfile:
|
@@ -19,7 +21,7 @@ And in `config/environment/production.rb`, add this line:
|
|
19
21
|
|
20
22
|
## How it works
|
21
23
|
1. Check to make sure we should show a prerendered page
|
22
|
-
1. Check if the request is from a crawler (agent string)
|
24
|
+
1. Check if the request is from a crawler (`_escaped_fragment_` or agent string)
|
23
25
|
2. Check to make sure we aren't requesting a resource (js, css, etc...)
|
24
26
|
3. (optional) Check to make sure the url is in the whitelist
|
25
27
|
4. (optional) Check to make sure the url isn't in the blacklist
|
@@ -54,6 +56,16 @@ If you've deployed the prerender service on your own, set the `PRERENDER_SERVICE
|
|
54
56
|
|
55
57
|
$ export PRERENDER_SERVICE_URL=<new url>
|
56
58
|
|
59
|
+
Or on heroku:
|
60
|
+
|
61
|
+
$ heroku config:add PRERENDER_SERVICE_URL=<new url>
|
62
|
+
|
63
|
+
As an alternative, you can pass `prerender_service_url` in the options object during initialization of the middleware
|
64
|
+
|
65
|
+
``` ruby
|
66
|
+
config.middleware.use Rack::Prerender, prerender_service_url: '<new url>'
|
67
|
+
```
|
68
|
+
|
57
69
|
## Testing
|
58
70
|
|
59
71
|
If you want to make sure your pages are rendering correctly:
|
data/lib/prerender_rails.rb
CHANGED
@@ -3,13 +3,13 @@ module Rack
|
|
3
3
|
require 'net/http'
|
4
4
|
|
5
5
|
def initialize(app, options={})
|
6
|
-
# googlebot, yahoo, and bingbot are
|
7
|
-
# we support _escaped_fragment_
|
8
|
-
#
|
6
|
+
# googlebot, yahoo, and bingbot are in this list even though
|
7
|
+
# we support _escaped_fragment_ to ensure it works for people
|
8
|
+
# who might not use the _escaped_fragment_ protocol
|
9
9
|
@crawler_user_agents = [
|
10
|
-
|
11
|
-
|
12
|
-
|
10
|
+
'googlebot',
|
11
|
+
'yahoo',
|
12
|
+
'bingbot',
|
13
13
|
'baiduspider',
|
14
14
|
'facebookexternalhit'
|
15
15
|
]
|
@@ -79,7 +79,7 @@ module Rack
|
|
79
79
|
request = Rack::Request.new(env)
|
80
80
|
|
81
81
|
return true if request.query_string.include? '_escaped_fragment_'
|
82
|
-
|
82
|
+
|
83
83
|
#if it is not a bot...dont prerender
|
84
84
|
return false if @crawler_user_agents.all? { |crawler_user_agent| !user_agent.downcase.include?(crawler_user_agent.downcase) }
|
85
85
|
|
@@ -122,7 +122,7 @@ module Rack
|
|
122
122
|
end
|
123
123
|
|
124
124
|
def get_prerender_service_url
|
125
|
-
ENV['PRERENDER_SERVICE_URL'] || 'http://prerender.herokuapp.com/'
|
125
|
+
@options[:prerender_service_url] || ENV['PRERENDER_SERVICE_URL'] || 'http://prerender.herokuapp.com/'
|
126
126
|
end
|
127
127
|
end
|
128
128
|
end
|
data/prerender_rails.gemspec
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |spec|
|
4
4
|
spec.name = "prerender_rails"
|
5
|
-
spec.version = "0.0
|
5
|
+
spec.version = "0.1.0"
|
6
6
|
spec.authors = ["Todd Hooper"]
|
7
7
|
spec.email = ["todd@collectiveip.com"]
|
8
8
|
spec.description = %q{Rails middleware to prerender your javascript heavy pages on the fly by a phantomjs service}
|
data/test/lib/prerender_rails.rb
CHANGED
@@ -101,6 +101,12 @@ describe Rack::Prerender do
|
|
101
101
|
assert_equal @prerender.build_api_url(request), 'http://prerenderurl.com/https://google.com/search?q=javascript'
|
102
102
|
ENV['PRERENDER_SERVICE_URL'] = nil
|
103
103
|
end
|
104
|
+
|
105
|
+
it "should build the correct api url with an initialization variable url" do
|
106
|
+
@prerender = Rack::Prerender.new(@app, prerender_service_url: 'http://prerenderurl.com')
|
107
|
+
request = Rack::MockRequest.env_for "https://google.com/search?q=javascript"
|
108
|
+
assert_equal @prerender.build_api_url(request), 'http://prerenderurl.com/https://google.com/search?q=javascript'
|
109
|
+
end
|
104
110
|
end
|
105
111
|
|
106
|
-
end
|
112
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: prerender_rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Todd Hooper
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-10-
|
11
|
+
date: 2013-10-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rack
|