prerender_rails_embedded 0.1 → 0.1.1

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 CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- NDI1YWQ0YzgxM2FlNDU3NTQ0NTRjODBlZmJmMTVhMjdlMzMyYzA5Ng==
4
+ YzU2Y2U3YWRmMTViMjMxMzFlMzc1ZmMzMGQ3NWVjN2Q5ZTllMjcxNw==
5
5
  data.tar.gz: !binary |-
6
- ODRlZjliNDA1NzZjYmU4MjUwY2FlZWM5ODc2ZjllZjc4MjdiZDgzNw==
6
+ NzE3NGZmOWQxMGUwMWYxMDAwMmU2ZTViMzk4ZmQwZjc4MGM4OTQyZA==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- NTI3ZjVjNjc0OTgwMTExNmE1YjU2NTc1OGVlNTg4NGQwZDFiMzBkOWY0NTM2
10
- OWNmNWU0NmYwMTMzNTY2Njk3MmJiYTAzOTc0NGZlN2JhZDUyZjE2NDE0ZGFl
11
- ZDE1MjdlMjNkY2IxMDM2ZjA2MDc0MDI5ODNjNjdjMWFlMzBkN2I=
9
+ YWE3ZTU2NGU0NjcxOWQyMmM2MTBlN2FkYmFkNmNmZDYwMmU3MjQ1ODAyMWYx
10
+ ZDBlN2QwMmVhYWUyNjU3OWYyZTc5MDhlOTdhZGQwMTg0NzNkMjc2YTdkZDY0
11
+ MjE2M2QyYTJhOGQyNDQ1N2YyNGNmMWI0MWUwMTA0MjE4NDY0NTM=
12
12
  data.tar.gz: !binary |-
13
- ZTkxZmVkNTg3YjNhNGE3MzBiYmNjNGJlNmMyYTFjZDliNGU5YzQwMDI1MmQw
14
- YzdmM2M3MDY0NjcyNGMwMTM3ZDE5OWZjNzQ2MDQ0YjQ2OWNmZjZlZjQ2ZTNm
15
- MjM3ZDAyMzBlNzU2NWMyODdjN2Q2MzJiYTg1YWFmNmU3ODJhYWE=
13
+ ZTEzZDExYjAzMDc0NTIxYzZkM2U4MGU5OGYzYjY1MzQ2YzJiN2YyYjBjM2Ix
14
+ ZmE3MzNlODVkZWM2NmQwZDgyMDA0MDU1MDk2OTU3YWI3YTZkYmQxNjFkOTk4
15
+ MjI4YTUzMDkzYTVjMjM5NzMzNjI0MmU0ZjRkYjNmNTBjNTU5OWU=
data/.gitignore CHANGED
@@ -3,3 +3,4 @@ node_modules/
3
3
  .DS_Store
4
4
  .idea/
5
5
  pkg/
6
+ Gemfile.lock
data/README.md CHANGED
@@ -1 +1,99 @@
1
- A plugin for prerender_rails middleware to render JavaScript web app on the fly calling phantomjs directly
1
+ Prerender Rails Embedded
2
+ ========================
3
+ A rails gem to use [prerender_rails](https://github.com/prerender/prerender_rails) middleware
4
+ to render JavaScript web app calling phantomjs on the fly without installing other services.
5
+
6
+ ### <a id='middleware'></a>
7
+ ## Overview
8
+
9
+ With **Prerender Rails Embedded** can be avoided a new node.js server installation in a
10
+ rails environment because rails will launch a `phantomjs` binary to render the js page.
11
+
12
+ Just to try out the [prerender.io/server](https://prerender.io/server) technology
13
+ and for low traffic situation, this plugin is not meant to support heavy traffic loads.
14
+
15
+ ### <a id='installation'></a>
16
+ ## Installation
17
+
18
+ Add in your `Gemfile` a line with
19
+
20
+ ```ruby
21
+ gem 'prerender_rails_embedded'
22
+ ```
23
+
24
+ and launch a
25
+
26
+ bundle install
27
+
28
+ to install it. Then in the `config/environment/production.rb` it should be added:
29
+
30
+ ```ruby
31
+ config.middleware.use Rack::Prerender before_render: PrerenderRailsEmbedded.local_renderer
32
+ ```
33
+
34
+ ### <a id='test'></a>
35
+ ### Test
36
+
37
+ To test the correct functioning of the `prerender_rails_embedded` gem just start rails
38
+ with `rails s` and launch a curl to a (js generated) url like this:
39
+
40
+ curl -H "User-Agent: Mozilla/5.0 baiduspider" \
41
+ "http://localhost:4000/articles/a0af82a84-d386-4690-9f68-81ac768bc6d3"
42
+
43
+ It should show a completely rendered page in standard output.
44
+
45
+ ### Warning
46
+
47
+ **WEBrick** and **Thin** don't support multiple nested requests so, using them it will
48
+ hang the request until a timeout is issued by the web server. To test it out you should
49
+ consider using [unicorn](http://unicorn.bogomips.org/) with more than one worker thread.
50
+
51
+ Just add `gen unicorn` to your `Gemfile` launch `bundle install` create a `config/unicorn.rb`
52
+ file with content (adjusting it to your needs)
53
+
54
+ ```ruby
55
+ # config/unicorn.rb
56
+ worker_processes 3
57
+ timeout 30
58
+ preload_app true
59
+
60
+ before_fork do |server, worker|
61
+
62
+ Signal.trap 'TERM' do
63
+ puts 'Unicorn master intercepting TERM and sending myself QUIT instead'
64
+ Process.kill 'QUIT', Process.pid
65
+ end
66
+
67
+ defined?(ActiveRecord::Base) and
68
+ ActiveRecord::Base.connection.disconnect!
69
+ end
70
+
71
+ after_fork do |server, worker|
72
+
73
+ Signal.trap 'TERM' do
74
+ puts 'Unicorn worker intercepting TERM and doing nothing. Wait for master to sent QUIT'
75
+ end
76
+
77
+ defined?(ActiveRecord::Base) and
78
+ ActiveRecord::Base.establish_connection
79
+ end
80
+ ```
81
+
82
+ and launch the web server with the command:
83
+
84
+ ```shell
85
+ bundle exec unicorn -p 3000 -c ./config/unicorn.rb
86
+ ```
87
+
88
+ ### <a id='todos'></a>
89
+ ## TODOs
90
+
91
+ This has been a very quick development so there are
92
+
93
+ * exceptions should exit immediately from phantomjs and in some cases they DON'T
94
+ * add a timeout for too long phantojs processing
95
+ * support 404 and error code in the same way prerender.io (server) does
96
+
97
+ ### Future enhancements
98
+ * add memory/disk cache deciding a correct eviction policy to avoid rendering pages
99
+ multiple times.
@@ -2,7 +2,7 @@ module PrerenderRailsEmbedded
2
2
  require 'phantomjs'
3
3
 
4
4
  def self.flatten_js_to_html(url)
5
- Phantomjs.run("#{File.dirname(__FILE__)}/prerender_rails_embedded.js", url, '--load-images=false', '--ignore-ssl-errors=true', '--ssl-protocol=tlsv1', '--disk-cache=yes', '--max-disk-cache-size=524228')
5
+ Phantomjs.run('--load-images=false', '--ignore-ssl-errors=true', '--ssl-protocol=tlsv1', '--disk-cache=yes', '--max-disk-cache-size=524228', "#{File.dirname(__FILE__)}/prerender_rails_embedded.js", url)
6
6
  end
7
7
 
8
8
  def self.local_renderer
@@ -1,19 +1,19 @@
1
1
  # coding: utf-8
2
2
 
3
3
  Gem::Specification.new do |spec|
4
- spec.name = "prerender_rails_embedded"
5
- spec.version = "0.1"
6
- spec.authors = ["Gian Carlo Pace"]
7
- spec.email = ["giancarlo.pace@etalia.net"]
4
+ spec.name = 'prerender_rails_embedded'
5
+ spec.version = '0.1.1'
6
+ spec.authors = ['Gian Carlo Pace']
7
+ spec.email = %w(giancarlo.pace@etalia.net)
8
8
  spec.description = %q{A plugin for prerender_rails middleware to render JavaScript web app on the fly calling phantomjs directly}
9
9
  spec.summary = %q{Prerender your backbone/angular/javascript rendered application on the fly when search engines crawl}
10
- spec.homepage = "https://github.com/EtaliaSA/prerender_rails_embedded"
11
- spec.license = "Apache License 2.0"
10
+ spec.homepage = 'https://github.com/EtaliaSA/prerender_rails_embedded'
11
+ spec.license = 'Apache License 2.0'
12
12
 
13
13
  spec.files = `git ls-files`.split($/)
14
14
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
15
15
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
16
- spec.require_paths = ["lib"]
16
+ spec.require_paths = %w(lib)
17
17
 
18
18
  spec.add_development_dependency "bundler", "~> 1.3"
19
19
  spec.add_development_dependency "rake"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: prerender_rails_embedded
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.1'
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gian Carlo Pace
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-04-11 00:00:00.000000000 Z
11
+ date: 2014-04-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler