prerender_rails_embedded 0.2.7 → 0.2.8

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- MTQwZjkwYmEyMTlkNDNiMzFlMGY4N2E2ZDFhNzkyMThmMmFiMWFjZA==
4
+ N2JmZjlkMzkxMTc2NTA3M2M1NzA1YjY0MTIzODMyMDM1MDk2OTFkOQ==
5
5
  data.tar.gz: !binary |-
6
- MjhkYmE5ZTFjOWZmMDFjYjIwMDhjNjdlZTc4MzllODI2ZmQ4MjM3ZA==
6
+ MDVlMjA2MzI1NWI4NjA0MGNkYmM2OTEzOTViNzRjNTQxZjlhMmJmZA==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- Njg3YjU0YjIyNmZjMmJjODJlNjU4MWNlNDlkMjA4OGNkMWNkNmQwNDI4ODdh
10
- MzU0ZjMxYWE4NTE4ZGExM2NjYmQ0ZDg3ZDg1YTZkOTkyZmJhMTdkZmUzMDgy
11
- OTdkY2E3ODIzNjc5ZjBiYmYzZjMxMjc2YjJmMjgyMzA5N2VjZTA=
9
+ YzJlMWIxNzQ0NzQzYWJlNTkwM2Y4N2RjMTlkNmMyZGU4OWQ3MWE0MDRkMWQz
10
+ NWZhYmM2ZWFjN2UwYjQ0NzU3ZDdjODUwMmM4ZjQyZjhlNmU4ZjlkYWE1ZGMw
11
+ ZjVmMjU4MGM0NDQ3Y2IwNzJlM2MzMDA3NjIwMGU3MjQ1ZjQyMjM=
12
12
  data.tar.gz: !binary |-
13
- OTIxNDU2NDNlNGJmZmE2NmJkMDhhNzI4ZjlkNTcyNWM3M2U4OWU1YjE4OWM5
14
- Njg1NTIyZjA2OGI1N2U5NDNjZThiMjU0ZjBjYTA3OTg4NWMwMjRlYjU2M2U2
15
- ZmE1MjI4ZDFhZDZiMDc4MmMzMWM3ZTVhYWEwNDQzMDMwNTdiOTQ=
13
+ MjJmNGQ5ZGQzM2JhNzA1MWVjN2UxYmYzNDYwODRlYzZkZmIwZGM2ZmIzODM4
14
+ NDhmYjYzNTYxYjUwYzQzOTg2ZTQxZWQ3N2U5NmYxYjk3NzY5ZGI3OGYxYzk1
15
+ YTc3ZGYyZWZiZDY0NWJmYmM2OGJmMzc1MjJlMTY1NjE0YTVlYTg=
@@ -68,7 +68,8 @@ surrender.javascriptToExecuteOnPage = function() {
68
68
 
69
69
  surrender.serveHtml = function(html) {
70
70
  system.stdout.writeLine(html);
71
- phantom.exit();
71
+ this.logDebug('page returned to rails: ' + page.address);
72
+ phantom.exit(0);
72
73
  };
73
74
 
74
75
  surrender.evaluateJavascriptOnPage = function(t, msPassed) {
@@ -79,11 +80,13 @@ surrender.evaluateJavascriptOnPage = function(t, msPassed) {
79
80
 
80
81
  if(!out.shouldWaitForPrerenderReady || (out.shouldWaitForPrerenderReady && out.prerenderReady) || msPassed >= 20000) {
81
82
 
82
- if (msPassed >= 20000) _this.logError("prerenderReady=true not found after 20s for page: " + page.url);
83
+ if (msPassed >= 20000) _this.logWarning("prerenderReady=true not found after 20s for page: " + page.url);
84
+
85
+ _this.logDebug('js evaluated: ' + page.address);
86
+ _this.serveHtml(out.html);
83
87
 
84
- _this.serveHtml(out.html);
85
88
  } else {
86
- setTimeout(function(){_this.evaluateJavascriptOnPage(_this, msPassed + EVALUATE_JAVASCRIPT_CHECK_TIMEOUT)}, EVALUATE_JAVASCRIPT_CHECK_TIMEOUT);
89
+ _this.evaluateJavascriptTimeout = setTimeout(function(){_this.evaluateJavascriptOnPage(_this, msPassed + EVALUATE_JAVASCRIPT_CHECK_TIMEOUT)}, EVALUATE_JAVASCRIPT_CHECK_TIMEOUT);
87
90
  }
88
91
  return _this;
89
92
  };
@@ -92,32 +95,33 @@ surrender.run = function() {
92
95
  var _this = this;
93
96
 
94
97
  try {
98
+
95
99
  page.address = this.removeEscapedFragmentParameter(this.params().address);
96
100
  page.settings.userAgent = 'EtaliaBotAgent';
97
- page.settings.resourceTimeout = 30000;
101
+ page.settings.resourceTimeout = 10000;
102
+
103
+ _this.logDebug('requested: ' + page.address);
104
+
98
105
  page.open(page.address, function (st) {
106
+ _this.logDebug('opened: ' + page.address + 'with status: ' + st);
107
+
99
108
  if (st !== 'success') throw 'FAIL to load the address';
109
+
100
110
  _this.evaluateJavascriptOnPage();
101
111
  });
112
+
102
113
  } catch(e) {
114
+ _this.logError(e);
103
115
  console.log(e);
104
116
  phantom.exit(1);
105
117
  }
106
118
 
107
119
  page.onError = function(message, trace) {
108
120
  _this.logError(message);
109
-
110
- //if (trace && trace.length) {
111
- // msgStack.push('TRACE:');
112
- // trace.forEach(function(t) {
113
- // msgStack.push(' -> ' + t.file + ': ' + t.line + (t.function ? ' (in function "' + t.function +'")' : ''));
114
- // });
115
- //}
116
- // console.log(msgStack.join('\n'));
117
121
  };
118
122
 
119
123
  page.onConsoleMessage = function(message, lineNum, sourceId) {
120
- _this.logInfo('CONSOLE: ' + message + '(' + sourceId + '/L#"' + lineNum + '")');
124
+ //_this.logInfo('CONSOLE: ' + message + '(' + sourceId + '/L#"' + lineNum + '")');
121
125
  };
122
126
 
123
127
  page.onResourceTimeout = function(request) {
@@ -1,8 +1,51 @@
1
1
  module PrerenderRailsEmbedded
2
+ require 'timeout'
2
3
  require 'phantomjs'
3
4
 
4
5
  def self.flatten_js_to_html(url)
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
+ out = ''
7
+ thread = nil
8
+ pid = -1
9
+ begin
10
+ Timeout::timeout(30) do
11
+ thread = Thread.new do
12
+ IO.popen(phantomjs_invocation(url)) do |io|
13
+ pid = io.pid
14
+ Rails.logger.debug("Spawing new phantomjs processo with pid: #{pid}")
15
+ io.read
16
+ end
17
+ end
18
+ out += thread.value
19
+ end
20
+ rescue Timeout::Error
21
+ Rails.logger.debug('triggering timed out')
22
+
23
+ if pid_exists?(pid)
24
+ Rails.logger.warn("phantomjs with pid##{pid} timed out")
25
+
26
+ Process.kill 9, pid
27
+ out += '<html><head><meta name="robots" content="noindex, noarchive " /></head><body></body></html>'
28
+ end
29
+ if thread && thread.alive?
30
+ Thread.kill(thread)
31
+ end
32
+ end
33
+ out
34
+ end
35
+
36
+
37
+ def self.pid_exists?(pid)
38
+ begin
39
+ Process.kill 0, pid
40
+ return true
41
+ rescue Errno::ESRCH
42
+ return false
43
+ end
44
+
45
+ end
46
+
47
+ def self.phantomjs_invocation(url)
48
+ [Phantomjs.path , '--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
49
  end
7
50
 
8
51
  def self.local_renderer
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |spec|
4
4
  spec.name = 'prerender_rails_embedded'
5
- spec.version = '0.2.7'
5
+ spec.version = '0.2.8'
6
6
  spec.authors = ['Gian Carlo Pace', 'Luca Mirra']
7
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}
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: prerender_rails_embedded
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.7
4
+ version: 0.2.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gian Carlo Pace
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-01-26 00:00:00.000000000 Z
12
+ date: 2015-01-29 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -80,7 +80,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
80
80
  version: '0'
81
81
  requirements: []
82
82
  rubyforge_project:
83
- rubygems_version: 2.2.2
83
+ rubygems_version: 2.4.5
84
84
  signing_key:
85
85
  specification_version: 4
86
86
  summary: Prerender your backbone/angular/javascript rendered application on the fly