react_on_rails_pro 16.2.1 → 16.3.0.rc.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 +4 -4
- data/CHANGELOG.md +12 -13
- data/Gemfile.development_dependencies +1 -3
- data/Gemfile.lock +24 -26
- data/LICENSE_SETUP.md +75 -124
- data/README.md +29 -69
- data/docs/react-server-components/flight-protocol-syntax.md +294 -0
- data/docs/troubleshooting.md +1 -25
- data/lib/react_on_rails_pro/engine.rb +68 -8
- data/lib/react_on_rails_pro/license_validator.rb +252 -132
- data/lib/react_on_rails_pro/utils.rb +27 -15
- data/lib/react_on_rails_pro/version.rb +1 -1
- data/sig/react_on_rails_pro/license_validator.rbs +57 -0
- metadata +6 -5
- data/CI_SETUP.md +0 -502
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 9bcbae8e9b968c6c6b8b9f707f9c7595015c56af77c29e3b0c069063469bd812
|
|
4
|
+
data.tar.gz: a084d5851b315254056a147320f70c14a2052fe5c4dee0244171d0281ae75053
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 0a5a0c698d58a49260e31acd91ac9cc8d7135229e838dd890df0aa415bec027a39db2afaee1257218fecf0e85c82c468b9d37bd92b5a27abbbd78bc16ce2500f
|
|
7
|
+
data.tar.gz: 520c471a7c2bbd168664f2d719d1ca3e8dd1e8d028d8bc2b8ebadccd1fe633cf6bdfa3e9bb4adca916d351ecf22f42ddc58db00fe6976353913700ed16ecc393
|
data/CHANGELOG.md
CHANGED
|
@@ -6,8 +6,8 @@ All notable changes to this project will be documented in this file. Items under
|
|
|
6
6
|
|
|
7
7
|
Gem and package versions are the same except for beta releases where the gem uses a `.beta` and the package uses a `-beta` (same for `rc`).
|
|
8
8
|
|
|
9
|
-
1. **Gem**: `
|
|
10
|
-
2. **Package**: `
|
|
9
|
+
1. **Gem**: `X.X.X.beta.X`
|
|
10
|
+
2. **Package**: `X.X.X-beta.X`
|
|
11
11
|
|
|
12
12
|
You can find the **package** version numbers from this repo's tags and below in this file.
|
|
13
13
|
|
|
@@ -19,9 +19,15 @@ You can find the **package** version numbers from this repo's tags and below in
|
|
|
19
19
|
|
|
20
20
|
Changes since the last non-beta release.
|
|
21
21
|
|
|
22
|
-
###
|
|
22
|
+
### Changed
|
|
23
23
|
|
|
24
|
-
|
|
24
|
+
- **License-Optional Attribution Model**: React on Rails Pro now works without a license for evaluation, development, testing, and CI/CD. A paid license is only required for production deployments. Added `plan` field validation to both Ruby and Node.js license validators — only `"paid"` plan (or no plan field for backwards compatibility) is accepted. Old free licenses are now treated as invalid. Documentation overhauled across README and LICENSE_SETUP guides; removed CI_SETUP.md (CI needs no license configuration). [PR 2324](https://github.com/shakacode/react_on_rails/pull/2324) by [AbanoubGhadban](https://github.com/AbanoubGhadban).
|
|
25
|
+
|
|
26
|
+
### Added
|
|
27
|
+
|
|
28
|
+
- **Node Renderer Master/Worker Exports**: Added public `master` and `worker` exports to `react-on-rails-pro-node-renderer` package, allowing users to import from `react-on-rails-pro-node-renderer/master` and `react-on-rails-pro-node-renderer/worker`. [PR 2326](https://github.com/shakacode/react_on_rails/pull/2326) by [justin808](https://github.com/justin808).
|
|
29
|
+
|
|
30
|
+
## [16.2.0] - 2026-01-14
|
|
25
31
|
|
|
26
32
|
### Improved
|
|
27
33
|
|
|
@@ -34,7 +40,6 @@ Changes since the last non-beta release.
|
|
|
34
40
|
- Added `cached_stream_react_component` helper method, similar to `cached_react_component` but for streamed components.
|
|
35
41
|
- **License Validation System**: Implemented comprehensive JWT-based license validation with offline verification using RSA-256 signatures. License validation occurs at startup in both Ruby and Node.js environments. Supports required fields (`sub`, `iat`, `exp`) and optional fields (`plan`, `organization`, `iss`). FREE evaluation licenses are available for 3 months at [shakacode.com/react-on-rails-pro](https://shakacode.com/react-on-rails-pro). [PR #1857](https://github.com/shakacode/react_on_rails/pull/1857) by [AbanoubGhadban](https://github.com/AbanoubGhadban).
|
|
36
42
|
- **Pro-Specific Configurations Moved from Open-Source**: The following React Server Components (RSC) configurations are now exclusively in the Pro gem and should be configured in `ReactOnRailsPro.configure`:
|
|
37
|
-
|
|
38
43
|
- `rsc_bundle_js_file` - Path to the RSC bundle file
|
|
39
44
|
- `react_server_client_manifest_file` - Path to the React server client manifest
|
|
40
45
|
- `react_client_manifest_file` - Path to the React client manifest
|
|
@@ -42,7 +47,6 @@ Changes since the last non-beta release.
|
|
|
42
47
|
These configurations were previously available in the open-source `ReactOnRails.configure` block but have been moved to Pro where they belong since RSC is a Pro-only feature.
|
|
43
48
|
|
|
44
49
|
- **Streaming View Helpers Now Pro-Exclusive**: The following view helpers are now defined exclusively in the Pro gem:
|
|
45
|
-
|
|
46
50
|
- `stream_react_component` - Progressive SSR using React 18+ streaming
|
|
47
51
|
- `rsc_payload_react_component` - RSC payload rendering
|
|
48
52
|
|
|
@@ -66,8 +70,6 @@ Changes since the last non-beta release.
|
|
|
66
70
|
|
|
67
71
|
- **Body Duplication Bug On Streaming**: Fixed a bug that happens while streaming if the node renderer connection closed after streaming some chunks to the client. [PR 1995](https://github.com/shakacode/react_on_rails/pull/1995) by [AbanoubGhadban](https://github.com/AbanoubGhadban).
|
|
68
72
|
|
|
69
|
-
### Changed
|
|
70
|
-
|
|
71
73
|
### Deprecated
|
|
72
74
|
|
|
73
75
|
- **Node Renderer Configuration**: Renamed `bundlePath` configuration option to `serverBundleCachePath` in the node renderer to better describe its purpose and avoid confusion with Shakapacker's public bundle path. The old `bundlePath` option continues to work with deprecation warnings. Both `RENDERER_SERVER_BUNDLE_CACHE_PATH` (new) and `RENDERER_BUNDLE_PATH` (deprecated) environment variables are supported. [PR 2008](https://github.com/shakacode/react_on_rails/pull/2008) by [justin808](https://github.com/justin808).
|
|
@@ -121,7 +123,6 @@ Changes since the last non-beta release.
|
|
|
121
123
|
### Changed
|
|
122
124
|
|
|
123
125
|
- [PR 511](https://github.com/shakacode/react_on_rails_pro/pull/511) by [Romex91](https://github.com/Romex91)
|
|
124
|
-
|
|
125
126
|
- Set `bodyLimit` to 100 MB by default to fix error 413.
|
|
126
127
|
- Add `fastifyServerOptions` to the config
|
|
127
128
|
|
|
@@ -268,7 +269,6 @@ React 18 is now supported! Check the [React on Rails CHANGELOG.md](https://githu
|
|
|
268
269
|
### Added
|
|
269
270
|
|
|
270
271
|
- [PR 220](https://github.com/shakacode/react_on_rails_pro/pull/220) by [justin808](https://github.com/justin808).
|
|
271
|
-
|
|
272
272
|
- **Add `ssr_timeout` configuration** so the Rails server will not wait more than this many seconds for a SSR request to return once issued.
|
|
273
273
|
- Change default for `renderer_use_fallback_exec_js` to `false`.
|
|
274
274
|
- Change default log level to info.
|
|
@@ -547,9 +547,8 @@ Above changes in [PR 52](https://github.com/shakacode/react_on_rails_pro/pull/52
|
|
|
547
547
|
- support for javascript evaluation caching
|
|
548
548
|
- advanced error handling
|
|
549
549
|
|
|
550
|
-
[
|
|
551
|
-
[
|
|
552
|
-
[v16.2.0.rc.0]: https://github.com/shakacode/react_on_rails/compare/16.1.1...v16.2.0.rc.0
|
|
550
|
+
[Unreleased]: https://github.com/shakacode/react_on_rails/compare/v16.2.0...master
|
|
551
|
+
[16.2.0]: https://github.com/shakacode/react_on_rails/compare/v16.2.0.beta.0...v16.2.0
|
|
553
552
|
[4.0.0-rc.15]: https://github.com/shakacode/react_on_rails_pro/compare/4.0.0-rc.14...4.0.0-rc.15
|
|
554
553
|
[4.0.0.rc.11]: https://github.com/shakacode/react_on_rails_pro/compare/4.0.0-rc.9...4.0.0-rc.11
|
|
555
554
|
[4.0.0.rc.9]: https://github.com/shakacode/react_on_rails_pro/compare/4.0.0-rc.6...4.0.0-rc.9
|
|
@@ -6,11 +6,9 @@ eval_gemfile File.expand_path("../Gemfile.shared_dev_dependencies", __dir__)
|
|
|
6
6
|
|
|
7
7
|
git_source(:github) { |repo| "https://github.com/#{repo}.git" }
|
|
8
8
|
|
|
9
|
-
ruby '3.3.7'
|
|
10
|
-
|
|
11
9
|
gem "react_on_rails", path: "../"
|
|
12
10
|
|
|
13
|
-
gem "shakapacker", "9.
|
|
11
|
+
gem "shakapacker", "9.5.0"
|
|
14
12
|
gem "bootsnap", require: false
|
|
15
13
|
gem "rails", "~> 7.1"
|
|
16
14
|
gem "puma", "~> 6"
|
data/Gemfile.lock
CHANGED
|
@@ -9,7 +9,7 @@ GIT
|
|
|
9
9
|
PATH
|
|
10
10
|
remote: ..
|
|
11
11
|
specs:
|
|
12
|
-
react_on_rails (16.
|
|
12
|
+
react_on_rails (16.3.0.rc.1)
|
|
13
13
|
addressable
|
|
14
14
|
connection_pool
|
|
15
15
|
execjs (~> 2.5)
|
|
@@ -20,7 +20,7 @@ PATH
|
|
|
20
20
|
PATH
|
|
21
21
|
remote: .
|
|
22
22
|
specs:
|
|
23
|
-
react_on_rails_pro (16.
|
|
23
|
+
react_on_rails_pro (16.3.0.rc.1)
|
|
24
24
|
addressable
|
|
25
25
|
async (>= 2.6)
|
|
26
26
|
connection_pool
|
|
@@ -29,7 +29,7 @@ PATH
|
|
|
29
29
|
httpx (~> 1.5)
|
|
30
30
|
jwt (~> 2.7)
|
|
31
31
|
rainbow
|
|
32
|
-
react_on_rails (= 16.
|
|
32
|
+
react_on_rails (= 16.3.0.rc.1)
|
|
33
33
|
|
|
34
34
|
GEM
|
|
35
35
|
remote: https://rubygems.org/
|
|
@@ -119,7 +119,7 @@ GEM
|
|
|
119
119
|
traces (~> 0.18)
|
|
120
120
|
base64 (0.3.0)
|
|
121
121
|
benchmark (0.5.0)
|
|
122
|
-
bigdecimal (
|
|
122
|
+
bigdecimal (4.0.1)
|
|
123
123
|
bindex (0.8.1)
|
|
124
124
|
bootsnap (1.18.3)
|
|
125
125
|
msgpack (~> 1.2)
|
|
@@ -137,13 +137,13 @@ GEM
|
|
|
137
137
|
capybara-screenshot (1.0.26)
|
|
138
138
|
capybara (>= 1.0, < 4)
|
|
139
139
|
launchy
|
|
140
|
-
cgi (0.5.
|
|
140
|
+
cgi (0.5.1)
|
|
141
141
|
childprocess (5.0.0)
|
|
142
142
|
coderay (1.1.3)
|
|
143
143
|
commonmarker (1.1.4-arm64-darwin)
|
|
144
144
|
commonmarker (1.1.4-x86_64-darwin)
|
|
145
145
|
commonmarker (1.1.4-x86_64-linux)
|
|
146
|
-
concurrent-ruby (1.3.
|
|
146
|
+
concurrent-ruby (1.3.6)
|
|
147
147
|
connection_pool (3.0.2)
|
|
148
148
|
console (1.34.2)
|
|
149
149
|
fiber-annotation
|
|
@@ -159,13 +159,13 @@ GEM
|
|
|
159
159
|
bigdecimal
|
|
160
160
|
rexml
|
|
161
161
|
crass (1.0.6)
|
|
162
|
-
date (3.5.
|
|
162
|
+
date (3.5.1)
|
|
163
163
|
diff-lcs (1.5.1)
|
|
164
164
|
docile (1.4.0)
|
|
165
165
|
drb (2.2.3)
|
|
166
166
|
equivalent-xml (0.6.0)
|
|
167
167
|
nokogiri (>= 1.4.3)
|
|
168
|
-
erb (6.0.
|
|
168
|
+
erb (6.0.1)
|
|
169
169
|
erubi (1.13.1)
|
|
170
170
|
execjs (2.10.0)
|
|
171
171
|
fakefs (2.8.0)
|
|
@@ -190,11 +190,11 @@ GEM
|
|
|
190
190
|
http-2 (1.1.1)
|
|
191
191
|
httpx (1.6.3)
|
|
192
192
|
http-2 (>= 1.0.0)
|
|
193
|
-
i18n (1.14.
|
|
193
|
+
i18n (1.14.8)
|
|
194
194
|
concurrent-ruby (~> 1.0)
|
|
195
|
-
io-console (0.8.
|
|
195
|
+
io-console (0.8.2)
|
|
196
196
|
io-event (1.14.2)
|
|
197
|
-
irb (1.
|
|
197
|
+
irb (1.16.0)
|
|
198
198
|
pp (>= 0.6.0)
|
|
199
199
|
rdoc (>= 4.0.0)
|
|
200
200
|
reline (>= 0.4.2)
|
|
@@ -216,7 +216,7 @@ GEM
|
|
|
216
216
|
rb-fsevent (~> 0.10, >= 0.10.3)
|
|
217
217
|
rb-inotify (~> 0.9, >= 0.9.10)
|
|
218
218
|
logger (1.7.0)
|
|
219
|
-
loofah (2.
|
|
219
|
+
loofah (2.25.0)
|
|
220
220
|
crass (~> 1.0.2)
|
|
221
221
|
nokogiri (>= 1.12.0)
|
|
222
222
|
mail (2.9.0)
|
|
@@ -230,7 +230,8 @@ GEM
|
|
|
230
230
|
method_source (1.1.0)
|
|
231
231
|
metrics (0.15.0)
|
|
232
232
|
mini_mime (1.1.5)
|
|
233
|
-
minitest (
|
|
233
|
+
minitest (6.0.1)
|
|
234
|
+
prism (~> 1.5)
|
|
234
235
|
mize (0.4.1)
|
|
235
236
|
protocol (~> 2.0)
|
|
236
237
|
msgpack (1.7.2)
|
|
@@ -246,11 +247,11 @@ GEM
|
|
|
246
247
|
net-smtp (0.5.1)
|
|
247
248
|
net-protocol
|
|
248
249
|
nio4r (2.7.5)
|
|
249
|
-
nokogiri (1.
|
|
250
|
+
nokogiri (1.19.0-arm64-darwin)
|
|
250
251
|
racc (~> 1.4)
|
|
251
|
-
nokogiri (1.
|
|
252
|
+
nokogiri (1.19.0-x86_64-darwin)
|
|
252
253
|
racc (~> 1.4)
|
|
253
|
-
nokogiri (1.
|
|
254
|
+
nokogiri (1.19.0-x86_64-linux-gnu)
|
|
254
255
|
racc (~> 1.4)
|
|
255
256
|
package_json (0.2.0)
|
|
256
257
|
parallel (1.27.0)
|
|
@@ -274,7 +275,7 @@ GEM
|
|
|
274
275
|
pry (>= 0.13.0)
|
|
275
276
|
pry-theme (1.3.1)
|
|
276
277
|
coderay (~> 1.1)
|
|
277
|
-
psych (5.
|
|
278
|
+
psych (5.3.1)
|
|
278
279
|
date
|
|
279
280
|
stringio
|
|
280
281
|
public_suffix (7.0.0)
|
|
@@ -329,7 +330,7 @@ GEM
|
|
|
329
330
|
ffi (~> 1.0)
|
|
330
331
|
rbs (3.9.5)
|
|
331
332
|
logger
|
|
332
|
-
rdoc (
|
|
333
|
+
rdoc (7.1.0)
|
|
333
334
|
erb
|
|
334
335
|
psych (>= 4.0.0)
|
|
335
336
|
tsort
|
|
@@ -415,7 +416,7 @@ GEM
|
|
|
415
416
|
websocket (~> 1.0)
|
|
416
417
|
semantic_range (3.1.0)
|
|
417
418
|
sexp_processor (4.17.1)
|
|
418
|
-
shakapacker (9.
|
|
419
|
+
shakapacker (9.5.0)
|
|
419
420
|
activesupport (>= 5.2)
|
|
420
421
|
package_json
|
|
421
422
|
rack-proxy (>= 0.6.1)
|
|
@@ -440,12 +441,12 @@ GEM
|
|
|
440
441
|
sqlite3 (1.7.3-arm64-darwin)
|
|
441
442
|
sqlite3 (1.7.3-x86_64-darwin)
|
|
442
443
|
sqlite3 (1.7.3-x86_64-linux)
|
|
443
|
-
stringio (3.
|
|
444
|
+
stringio (3.2.0)
|
|
444
445
|
sync (0.5.0)
|
|
445
446
|
term-ansicolor (1.10.2)
|
|
446
447
|
mize
|
|
447
448
|
tins (~> 1.0)
|
|
448
|
-
thor (1.
|
|
449
|
+
thor (1.5.0)
|
|
449
450
|
tilt (2.4.0)
|
|
450
451
|
timeout (0.4.4)
|
|
451
452
|
tins (1.33.0)
|
|
@@ -482,7 +483,7 @@ GEM
|
|
|
482
483
|
xpath (3.2.0)
|
|
483
484
|
nokogiri (~> 1.8)
|
|
484
485
|
yard (0.9.36)
|
|
485
|
-
zeitwerk (2.7.
|
|
486
|
+
zeitwerk (2.7.4)
|
|
486
487
|
|
|
487
488
|
PLATFORMS
|
|
488
489
|
arm64-darwin-24
|
|
@@ -530,7 +531,7 @@ DEPENDENCIES
|
|
|
530
531
|
sass-rails
|
|
531
532
|
scss_lint
|
|
532
533
|
selenium-webdriver (= 4.9.0)
|
|
533
|
-
shakapacker (= 9.
|
|
534
|
+
shakapacker (= 9.5.0)
|
|
534
535
|
spring
|
|
535
536
|
spring-watcher-listen
|
|
536
537
|
sprockets
|
|
@@ -541,8 +542,5 @@ DEPENDENCIES
|
|
|
541
542
|
webmock
|
|
542
543
|
yard
|
|
543
544
|
|
|
544
|
-
RUBY VERSION
|
|
545
|
-
ruby 3.3.7p123
|
|
546
|
-
|
|
547
545
|
BUNDLED WITH
|
|
548
546
|
2.5.4
|
data/LICENSE_SETUP.md
CHANGED
|
@@ -1,35 +1,53 @@
|
|
|
1
1
|
# React on Rails Pro License Setup
|
|
2
2
|
|
|
3
|
-
This document explains how to configure your React on Rails Pro license.
|
|
3
|
+
This document explains how to configure your React on Rails Pro license for production use.
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## License-Optional Model
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
React on Rails Pro works **without a license** for evaluation, development, testing, and CI/CD. No registration or license key is needed to get started.
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
**A paid license is required only for production deployments.**
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
11
|
+
| Environment | License Required? |
|
|
12
|
+
| ------------------ | ----------------- |
|
|
13
|
+
| Development | No |
|
|
14
|
+
| Test | No |
|
|
15
|
+
| CI/CD | No |
|
|
16
|
+
| Staging (non-prod) | No |
|
|
17
|
+
| Production | **Yes** (paid) |
|
|
15
18
|
|
|
16
|
-
|
|
19
|
+
## Upgrading from Previous Versions
|
|
17
20
|
|
|
18
|
-
|
|
21
|
+
If you're upgrading from an earlier version of React on Rails Pro, note these changes:
|
|
19
22
|
|
|
20
|
-
|
|
23
|
+
### Breaking Changes
|
|
21
24
|
|
|
22
|
-
|
|
23
|
-
- **
|
|
24
|
-
- **
|
|
25
|
-
- **Cost**: FREE - just register with your email
|
|
26
|
-
- **Renewal**: Get a new free license or upgrade to paid
|
|
25
|
+
- **`ReactOnRailsPro::Utils.licensed?` has been removed** — Use `ReactOnRailsPro::LicenseValidator.license_status == :valid` instead
|
|
26
|
+
- **`ReactOnRailsPro::LicenseValidator.license_data` has been removed** — Only `license_status` and `license_expiration` are available
|
|
27
|
+
- **The app will no longer crash on invalid/missing licenses** — License issues are now logged as warnings in production and info in non-production environments
|
|
27
28
|
|
|
28
|
-
###
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
29
|
+
### Migration Steps
|
|
30
|
+
|
|
31
|
+
1. **Remove any custom error handling for license exceptions** — The license validator no longer raises exceptions
|
|
32
|
+
2. **Update license status checks:**
|
|
33
|
+
|
|
34
|
+
```ruby
|
|
35
|
+
# Old (removed)
|
|
36
|
+
ReactOnRailsPro::Utils.licensed?
|
|
37
|
+
|
|
38
|
+
# New
|
|
39
|
+
ReactOnRailsPro::LicenseValidator.license_status == :valid
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
3. **Remove any code that accessed `license_data`** — This method is no longer available
|
|
43
|
+
|
|
44
|
+
### Behavior Changes
|
|
45
|
+
|
|
46
|
+
- **Missing license**: Previously raised an error in production. Now logs a warning and continues running.
|
|
47
|
+
- **Expired license**: Previously raised an error. Now logs a warning and continues running.
|
|
48
|
+
- **Invalid license**: Previously raised an error. Now logs a warning and continues running.
|
|
49
|
+
|
|
50
|
+
This change allows your application to start even with license issues, giving you time to resolve them without downtime.
|
|
33
51
|
|
|
34
52
|
## Installation
|
|
35
53
|
|
|
@@ -44,17 +62,14 @@ export REACT_ON_RAILS_PRO_LICENSE="eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9..."
|
|
|
44
62
|
**For different environments:**
|
|
45
63
|
|
|
46
64
|
```bash
|
|
47
|
-
# Development (.env file)
|
|
48
|
-
REACT_ON_RAILS_PRO_LICENSE=your_license_token_here
|
|
49
|
-
|
|
50
65
|
# Production (Heroku)
|
|
51
66
|
heroku config:set REACT_ON_RAILS_PRO_LICENSE="your_token"
|
|
52
67
|
|
|
53
68
|
# Production (Docker)
|
|
54
69
|
# Add to docker-compose.yml or Dockerfile ENV
|
|
55
70
|
|
|
56
|
-
# CI/CD
|
|
57
|
-
# Add to your CI environment variables
|
|
71
|
+
# CI/CD (optional — CI works without a license)
|
|
72
|
+
# Add to your CI environment variables if needed
|
|
58
73
|
```
|
|
59
74
|
|
|
60
75
|
### Method 2: Configuration File
|
|
@@ -82,126 +97,76 @@ The license is validated at multiple points:
|
|
|
82
97
|
2. **Node Renderer**: When the Node renderer process starts
|
|
83
98
|
3. **Browser Package**: Trusts server-side validation (via `railsContext.rorPro`)
|
|
84
99
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
React on Rails Pro requires a valid license in **all environments**:
|
|
88
|
-
|
|
89
|
-
- ✅ **Development**: Requires license (use FREE license) - **Fails immediately on expiration**
|
|
90
|
-
- ✅ **Test**: Requires license (use FREE license) - **Fails immediately on expiration**
|
|
91
|
-
- ✅ **CI/CD**: Requires license (use FREE license) - **Fails immediately on expiration**
|
|
92
|
-
- ✅ **Production**: Requires license (use paid license) - **1-month grace period after expiration**
|
|
93
|
-
|
|
94
|
-
Get your FREE evaluation license in 30 seconds - no credit card required!
|
|
95
|
-
|
|
96
|
-
### Production Grace Period
|
|
97
|
-
|
|
98
|
-
**Production environments only** receive a **1-month grace period** when a license expires:
|
|
99
|
-
|
|
100
|
-
- ⚠️ **During grace period**: Application continues to run but logs ERROR messages on every startup
|
|
101
|
-
- ❌ **After grace period**: Application fails to start (same as dev/test)
|
|
102
|
-
- 🔔 **Warning messages**: Include days remaining in grace period
|
|
103
|
-
- ✅ **Development/Test**: No grace period - fails immediately (helps catch expiration early)
|
|
104
|
-
|
|
105
|
-
**Important**: The grace period is designed to give production deployments time to renew, but you should:
|
|
106
|
-
1. Monitor your logs for license expiration warnings
|
|
107
|
-
2. Renew licenses before they expire
|
|
108
|
-
3. Test license renewal in development/staging first
|
|
100
|
+
When no license is present, the application runs in **unlicensed mode**. This is fine for development, testing, and CI/CD. Production deployments should always have a valid paid license.
|
|
109
101
|
|
|
110
102
|
## Team Setup
|
|
111
103
|
|
|
112
104
|
### For Development Teams
|
|
113
105
|
|
|
114
|
-
|
|
106
|
+
No license setup is needed for development. Developers can install and use React on Rails Pro immediately.
|
|
115
107
|
|
|
116
|
-
|
|
117
|
-
2. Store it locally using one of the methods above
|
|
118
|
-
3. Ensure `config/react_on_rails_pro_license.key` is in your `.gitignore`
|
|
108
|
+
For production deployments, share a paid license via environment variable or configuration file.
|
|
119
109
|
|
|
120
110
|
### For CI/CD
|
|
121
111
|
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
1. Get a FREE license (can use any team member's or create `ci@yourcompany.com`)
|
|
125
|
-
2. Add to CI environment variables as `REACT_ON_RAILS_PRO_LICENSE`
|
|
126
|
-
3. Renew every 3 months (or use a paid license)
|
|
127
|
-
|
|
128
|
-
**Recommended**: Use GitHub Secrets, GitLab CI Variables, or your CI provider's secrets management.
|
|
112
|
+
CI/CD environments work without a license. If your CI pipeline deploys to production, ensure the production environment has a valid paid license configured.
|
|
129
113
|
|
|
130
114
|
## Verification
|
|
131
115
|
|
|
132
116
|
### Verify License is Working
|
|
133
117
|
|
|
134
118
|
**Ruby Console:**
|
|
119
|
+
|
|
135
120
|
```ruby
|
|
136
121
|
rails console
|
|
137
122
|
> ReactOnRails::Utils.react_on_rails_pro?
|
|
138
123
|
# Should return: true
|
|
139
124
|
```
|
|
140
125
|
|
|
141
|
-
**Note:** With startup validation enabled, your Rails app won't start with an invalid license. If you can run the Rails console, your license is valid.
|
|
142
|
-
|
|
143
|
-
**Check License Details:**
|
|
144
|
-
```ruby
|
|
145
|
-
> ReactOnRailsPro::LicenseValidator.license_data
|
|
146
|
-
# Shows: {"sub"=>"your@email.com", "exp"=>1234567890, "plan"=>"free", ...}
|
|
147
|
-
```
|
|
148
|
-
|
|
149
126
|
**Browser JavaScript Console:**
|
|
127
|
+
|
|
150
128
|
```javascript
|
|
151
|
-
window.railsContext.rorPro
|
|
129
|
+
window.railsContext.rorPro;
|
|
152
130
|
// Should return: true
|
|
153
131
|
```
|
|
154
132
|
|
|
155
133
|
## Troubleshooting
|
|
156
134
|
|
|
157
|
-
###
|
|
135
|
+
### Warning: "No license found"
|
|
158
136
|
|
|
159
|
-
|
|
160
|
-
1. Verify environment variable: `echo $REACT_ON_RAILS_PRO_LICENSE`
|
|
161
|
-
2. Check config file exists: `ls config/react_on_rails_pro_license.key`
|
|
162
|
-
3. **Get a FREE license**: [https://shakacode.com/react-on-rails-pro](https://shakacode.com/react-on-rails-pro)
|
|
137
|
+
This is expected behavior in development, test, and CI environments. The application will run in unlicensed mode. For production, ensure the `REACT_ON_RAILS_PRO_LICENSE` environment variable is set.
|
|
163
138
|
|
|
164
139
|
### Error: "Invalid license signature"
|
|
165
140
|
|
|
166
141
|
**Causes:**
|
|
142
|
+
|
|
167
143
|
- License token was truncated or modified
|
|
168
144
|
- Wrong license format (must be complete JWT token)
|
|
169
145
|
|
|
170
146
|
**Solutions:**
|
|
147
|
+
|
|
171
148
|
1. Ensure you copied the complete license (starts with `eyJ`)
|
|
172
149
|
2. Check for extra spaces or newlines
|
|
173
|
-
3.
|
|
150
|
+
3. Contact [support@shakacode.com](mailto:support@shakacode.com) for a replacement
|
|
174
151
|
|
|
175
152
|
### Error: "License has expired"
|
|
176
153
|
|
|
177
|
-
**What happens:**
|
|
178
|
-
- **Development/Test/CI**: Application fails to start immediately
|
|
179
|
-
- **Production**: 1-month grace period with ERROR logs, then fails to start
|
|
180
|
-
|
|
181
154
|
**Solutions:**
|
|
182
|
-
1. **Free License**: Get a new 3-month FREE license
|
|
183
|
-
2. **Paid License**: Contact support to renew
|
|
184
|
-
3. Visit: [https://shakacode.com/react-on-rails-pro](https://shakacode.com/react-on-rails-pro)
|
|
185
155
|
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
- The warning shows how many days remain
|
|
189
|
-
- Plan your license renewal before the grace period ends
|
|
156
|
+
1. Contact [support@shakacode.com](mailto:support@shakacode.com) to renew your paid license
|
|
157
|
+
2. Update the `REACT_ON_RAILS_PRO_LICENSE` environment variable with the new token
|
|
190
158
|
|
|
191
|
-
### Error: "License is
|
|
159
|
+
### Error: "License plan is not valid for production use"
|
|
192
160
|
|
|
193
|
-
**Cause:**
|
|
161
|
+
**Cause:** The license has a plan that is not authorized for production use (e.g., an old free evaluation license).
|
|
194
162
|
|
|
195
|
-
**Solution:**
|
|
163
|
+
**Solution:** Purchase a paid license. Contact [justin@shakacode.com](mailto:justin@shakacode.com) for pricing.
|
|
196
164
|
|
|
197
|
-
###
|
|
165
|
+
### Error: "License is missing required expiration field"
|
|
198
166
|
|
|
199
|
-
|
|
167
|
+
**Cause:** You may have an old or malformed license token.
|
|
200
168
|
|
|
201
|
-
|
|
202
|
-
2. **Get FREE license**: Takes 30 seconds at [shakacode.com](https://shakacode.com/react-on-rails-pro)
|
|
203
|
-
3. Check logs for specific error message
|
|
204
|
-
4. Ensure license is accessible to all processes (Rails + Node renderer)
|
|
169
|
+
**Solution:** Contact [support@shakacode.com](mailto:support@shakacode.com) for a new license.
|
|
205
170
|
|
|
206
171
|
## License Technical Details
|
|
207
172
|
|
|
@@ -211,12 +176,12 @@ The license is a JWT (JSON Web Token) signed with RSA-256, containing:
|
|
|
211
176
|
|
|
212
177
|
```json
|
|
213
178
|
{
|
|
214
|
-
"sub": "user@example.com",
|
|
215
|
-
"iat": 1234567890,
|
|
216
|
-
"exp": 1234567890,
|
|
217
|
-
"plan": "
|
|
218
|
-
"organization": "Your Company",
|
|
219
|
-
"iss": "api"
|
|
179
|
+
"sub": "user@example.com", // Your email (REQUIRED)
|
|
180
|
+
"iat": 1234567890, // Issued at timestamp (REQUIRED)
|
|
181
|
+
"exp": 1234567890, // Expiration timestamp (REQUIRED)
|
|
182
|
+
"plan": "paid", // License plan (Optional — only "paid" is valid for production)
|
|
183
|
+
"organization": "Your Company", // Organization name (Optional)
|
|
184
|
+
"iss": "api" // Issuer identifier (Optional, standard JWT claim)
|
|
220
185
|
}
|
|
221
186
|
```
|
|
222
187
|
|
|
@@ -229,7 +194,6 @@ The license is a JWT (JSON Web Token) signed with RSA-256, containing:
|
|
|
229
194
|
|
|
230
195
|
### Privacy
|
|
231
196
|
|
|
232
|
-
- We only collect email during registration
|
|
233
197
|
- No usage tracking or phone-home in the license system
|
|
234
198
|
- License is validated offline using cryptographic signatures
|
|
235
199
|
|
|
@@ -237,36 +201,23 @@ The license is a JWT (JSON Web Token) signed with RSA-256, containing:
|
|
|
237
201
|
|
|
238
202
|
Need help?
|
|
239
203
|
|
|
240
|
-
1. **
|
|
241
|
-
2. **
|
|
242
|
-
3. **Email**: support@shakacode.com
|
|
243
|
-
4. **License Management**: [shakacode.com/react-on-rails-pro](https://shakacode.com/react-on-rails-pro)
|
|
204
|
+
1. **Email**: support@shakacode.com
|
|
205
|
+
2. **Sales**: [justin@shakacode.com](mailto:justin@shakacode.com) for pricing
|
|
244
206
|
|
|
245
207
|
## Security Best Practices
|
|
246
208
|
|
|
247
|
-
1. ✅ **Never commit licenses to Git**
|
|
209
|
+
1. ✅ **Never commit licenses to Git** — Add `config/react_on_rails_pro_license.key` to `.gitignore`
|
|
248
210
|
2. ✅ **Use environment variables in production**
|
|
249
|
-
3. ✅ **Use CI secrets for
|
|
211
|
+
3. ✅ **Use CI secrets for production deployment pipelines**
|
|
250
212
|
4. ✅ **Don't share licenses publicly**
|
|
251
|
-
5. ✅ **Each developer gets their own FREE license**
|
|
252
|
-
6. ✅ **Renew before expiration** (we'll send reminders)
|
|
253
213
|
|
|
254
214
|
## FAQ
|
|
255
215
|
|
|
256
|
-
**Q:
|
|
257
|
-
A:
|
|
258
|
-
|
|
259
|
-
**Q: Can I use a free license in production?**
|
|
260
|
-
A: Free licenses are for evaluation only. Production deployments require a paid license.
|
|
216
|
+
**Q: Do I need a license for development?**
|
|
217
|
+
A: No. React on Rails Pro works without a license for development, testing, and evaluation.
|
|
261
218
|
|
|
262
|
-
**Q:
|
|
263
|
-
A:
|
|
264
|
-
|
|
265
|
-
**Q: What happens when my free license expires?**
|
|
266
|
-
A: Get a new 3-month FREE license, or upgrade to a paid license for production use.
|
|
219
|
+
**Q: Do I need a license for CI?**
|
|
220
|
+
A: No. CI/CD environments work without a license. Only production deployments require a paid license.
|
|
267
221
|
|
|
268
222
|
**Q: Do I need internet to validate the license?**
|
|
269
223
|
A: No! License validation is completely offline using cryptographic signatures.
|
|
270
|
-
|
|
271
|
-
**Q: Is my email shared or sold?**
|
|
272
|
-
A: Never. We only use it to send you license renewals and important updates.
|