static-rails 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9a555d5b5ad757f03beff3a2b8e25b4abebdb3e9446d6089017c02b11450bc4a
4
- data.tar.gz: 4b48dff937b530a8d407d312091b80649dbc0a4522457dc022eba8ebb8926af7
3
+ metadata.gz: 59b735436f8beadbe02b488f6d9ba385beb4527cc3b1da082e4e07f2a4645dc9
4
+ data.tar.gz: 5c40b3b20ea44e52dabef6d8660aaf59784f198759baac9e909ba9283916a9f8
5
5
  SHA512:
6
- metadata.gz: c789c382631f82888708250d75cbf7a541bb344a46706699903fe267e957ced8f20b5bf4ff24e27171eaf2c6fb3d2ef82e81cb7ce0044a5fc7abb99f92b960f8
7
- data.tar.gz: 41dcfb55228d18933242c3c2aef24cbbcccd6cd0508ce10a97f2c0a3849db03aa81d099efd43f571fd57bd77220aabd6fc176ab8c7188f29ad9eafcb1b6642fd
6
+ metadata.gz: 2d222bec9bcc9c02e3c52adadcd8426290dccbd18aaff465723ed4b152147d42c4980bf34284669cbd58ec2b9794aaf02b3e719bb1b76324ffceb24547b6afbc
7
+ data.tar.gz: c42139bb13e835326dd49c37f569c816689eff8a490befba9f6b37491e0113992dcaf4f5395fb24aaea20143c7abeacd5db8b0276932748ae7fc1476566263e3
data/.circleci/config.yml CHANGED
@@ -8,12 +8,10 @@ jobs:
8
8
  steps:
9
9
  - checkout
10
10
 
11
- - run:
12
- name: Add fake blog to the host
13
- command: echo 127.0.0.1 blog.localhost | sudo tee -a /etc/hosts
11
+ - run: echo 127.0.0.1 blog.localhost | sudo tee -a /etc/hosts
14
12
 
15
13
  # One of the apps needs hugo
16
- - run: apt-get update && apt-get install -y --no-install-recommends hugo
14
+ - run: sudo apt-get update && sudo apt-get install -y --no-install-recommends hugo
17
15
 
18
16
  # Bundle install dependencies
19
17
  - type: cache-restore
@@ -57,7 +55,36 @@ jobs:
57
55
  - ~/.cache
58
56
  key: v2-yarn-{{ checksum "example/yarn.lock" }}
59
57
 
60
- - run: bin/rake standard:fix
58
+ # Bundle install dependencies for jekyll app
59
+ - type: cache-restore
60
+ key: v1-jekyll-{{ checksum "example/static/docs/Gemfile.lock" }}
61
+
62
+ - run: |
63
+ cd example/static/docs
64
+ bundle install --path vendor/bundle
65
+
66
+ - type: cache-save
67
+ key: v1-jekyll-{{ checksum "example/static/docs/Gemfile.lock" }}
68
+ paths:
69
+ - example/static/docs/vendor/bundle
70
+
71
+ # Npm install for Eleventy app
72
+ - restore_cache:
73
+ keys:
74
+ - v1-eleventy-{{ checksum "example/static/blog-docs/package-lock.json" }}
75
+ # fallback to using the latest cache if no exact match is found
76
+ - v1-eleventy-
77
+
61
78
  - run: |
62
- cd example
63
- ./script/test
79
+ cd example/static/blog-docs
80
+ npm install
81
+
82
+ - save_cache:
83
+ paths:
84
+ - example/static/blog-docs/node_modules
85
+ key: v1-eleventy-{{ checksum "example/static/blog-docs/package-lock.json" }}
86
+
87
+ - run: bundle exec rake standard:fix
88
+ - run: |
89
+ cd example
90
+ ./script/test
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- static-rails (0.0.1)
4
+ static-rails (0.0.2)
5
5
  rack-proxy (~> 0.6)
6
6
  railties (>= 5.0.0)
7
7
 
data/README.md CHANGED
@@ -1,44 +1,71 @@
1
1
  # static-rails
2
2
 
3
- A gem to support integrating one or more static sites with your Rails
4
- application.
3
+ [![CircleCI](https://circleci.com/gh/testdouble/static-rails.svg?style=svg)](https://circleci.com/gh/testdouble/static-rails)
4
+
5
+ ## What is this thing?
6
+
7
+ **tl;dr in development, static-rails runs your static site generators &
8
+ proxies requests; in production, it compiles and serves the final assets**
9
+
10
+ Static site generators are hot right now. Maybe you're hip with "the
11
+ [Jamstack](https://jamstack.org)", or maybe your API documentation is generated
12
+ by [Hugo](https://gohugo.io), or maybe your marketing folks use
13
+ [Jekyll](https://jekyllrb.com) for the company blog.
14
+
15
+ Up until now, compiling static assets with any degree of sophistication beyond
16
+ dumping them in your app's `public/` directory represented a significant
17
+ deviation from the "Rails Way". But the alternative—keeping your static sites
18
+ wholly separate from your Rails app—raises myriad operational challenges, from
19
+ tracking multiple git repositories, to managing multiple server configurations,
20
+ to figuring out a way to share common JavaScript and CSS assets between them
21
+ all.
22
+
23
+ No longer! static-rails lets you use your static asset generators of choice
24
+ without forcing you to abandon your monolithic Rails architecture.
25
+
26
+ Here's what it does:
27
+
28
+ * In `development` and `test` environments, the gem will run launch each site's
29
+ `serve_command` and proxy to them any requests that match their configured
30
+ `url_subdomain` and `url_root_path` properties
31
+
32
+ * When running `rake assets:precompile` (typically performed during a deploy),
33
+ the `compile_command` you've configured will be executed for each of your
34
+ sites
35
+
36
+ * In `production`, the gem will host each of your sites' assets out of your
37
+ configured `compile_dir` using the same middleware code that Rails uses to
38
+ host assets out of `public/`. (Putting a performant CDN in front of everything
39
+ remains an exercise for the reader.)
5
40
 
6
41
  ## Install
7
42
 
8
- Add this to the Gemfile of your Rails app:
43
+ Add this to your Gemfile:
9
44
 
10
45
  ```
11
46
  gem "static-rails"
12
47
  ```
13
48
 
14
- And run this to generate an initializer in which to configure your static sites:
49
+ Then run this generator to create a configuration file
50
+ `config/initializers/static.rb`:
15
51
 
16
52
  ```
17
53
  $ rails g static_rails:initializer
18
54
  ```
19
55
 
20
- This will create an documented configuration file in
21
- `config/initializers/static.rb`
22
-
23
- Once installed, any `config.sites` you specify will be handled by static-rails
24
- in the following way, by default:
25
-
26
- * In `development` and `test`, static-rails will start each site's
27
- `serve_command` and proxy any requests to the Rails server that match the
28
- `url_subdomain` and `url_root_path` to that server
29
-
30
- * When running `rake assets:precompile` (typically performed during a deploy),
31
- static-rails will run the `compile_command` for each configured site
56
+ You can check out the configuration options in the [generated file's
57
+ comments](/lib/generators/templates/static.rb).
32
58
 
33
- * In `production`, static-rails will use `Rack::Static` to map any requests to
34
- the Rails server that match the site's `url_subdomain` and `url_root_path`
35
- settings (note that this is the opposite default for Rails'
36
- `config.public_file_server.enabled` setting, which is disabled by default)
37
-
38
- For examples on how to configure your static site, read on!
59
+ Want an example of setting things up? You're in luck, there's an [example
60
+ app](/example) right in this repo!
39
61
 
40
62
  ## Configuring your static site generators
41
63
 
64
+ Assuming you won't be mounting your static site to your app's root `/` path,
65
+ you'll probably need to configure its base URL path somehow. Here are
66
+ some tips (and if your tool of choice isn't listed, we'd love a [pull
67
+ request](https://github.com/testdouble/static-rails/edit/master/README.md)!):
68
+
42
69
  ### Using Jekyll
43
70
 
44
71
  If you have a Jekyll app that you plan on serving from a non-root path (say,
@@ -77,8 +104,8 @@ To mitigate this, there are a few things you can do:
77
104
  base path with `{{ "/" | relURL }}` (given the above `baseURL`, this will
78
105
  render `"/marketing/"`)
79
106
 
80
- Also, because Hugo will serve `/livereload.js` from the root, it probably won't
81
- work in development when running through the static-rails proxy in development.
107
+ Also, because Hugo will serve `/livereload.js` from the root, live-reloading probably
108
+ won't work in development when running through the static-rails proxy.
82
109
  You might consider disabling it with `--disableLiveReload`.
83
110
 
84
111
  A static-rails config for a Hugo configuration in `sites` might look like:
@@ -125,10 +152,10 @@ A static-rails config for an Eleventy configuration in `sites` might look like:
125
152
 
126
153
  ### Using Gatsby
127
154
 
128
- ** ⚠️ Gatsby is unlikely to work in development mode, due to [this
155
+ <strong> ⚠️ Gatsby is unlikely to work in development mode, due to [this
129
156
  issue](https://github.com/gatsbyjs/gatsby/issues/18143), wherein all the assets
130
157
  are actually served over a socket.io WebSocket channel and not able to be
131
- proxied effectively. ⚠️ **
158
+ proxied effectively. ⚠️ </strong>
132
159
 
133
160
  If you're mounting a [Gatsby](https://www.gatsbyjs.org) site to a non-root path
134
161
  (e.g. in static-rails, you've configured its `url_root_path` to, say,
@@ -160,3 +187,12 @@ A static-rails config for a Gatsby configuration in `sites` might look like:
160
187
  compile_dir: "static/docs/public"
161
188
  },
162
189
  ```
190
+
191
+ ## Code of Conduct
192
+
193
+ This project follows Test Double's [code of
194
+ conduct](https://testdouble.com/code-of-conduct) for all community interactions,
195
+ including (but not limited to) one-on-one communications, public posts/comments,
196
+ code reviews, pull requests, and GitHub issues. If violations occur, Test Double
197
+ will take any action they deem appropriate for the infraction, up to and
198
+ including blocking a user from the organization's repositories.
@@ -21,7 +21,8 @@ StaticRails.config do |config|
21
21
  # # File path to the static app relative to Rails root path
22
22
  # source_dir: "static/blog",
23
23
  #
24
- # # Constrain static app to the following subdomain (omit or leave nil if you aren't hosting the site on a subdomain)
24
+ # # Constrain static app to the following subdomain (omit or leave nil
25
+ # # if you aren't hosting the site on a subdomain)
25
26
  # url_subdomain: "blog",
26
27
  #
27
28
  # # Mount the static site web hosting to a certain sub-path (e.g. "/docs")
@@ -30,10 +31,16 @@ StaticRails.config do |config|
30
31
  # # Whether to run the local development/test server or not
31
32
  # start_server: !Rails.env.production?,
32
33
  #
33
- # # If start_server is true, wait to proxy requests to the server until it can connect to server_host over TCP on server_port
34
+ # # If start_server is true, wait to proxy requests to the server until it
35
+ # # can connect to server_host over TCP on server_port
34
36
  # ping_server: true
35
37
  #
36
- # # The command to execute when running the static app in local development/test environments
38
+ # # Any environment variables you need to pass to the server & compile
39
+ # # commands as a hash (e.g. `env: {"BUNDLE_PATH" => "vendor/bundle"}`)
40
+ # env: {},
41
+ #
42
+ # # The command to execute when running the static app in local
43
+ # # development/test environments
37
44
  # server_command: "hugo server",
38
45
  #
39
46
  # # The host the local development/test server should be reached on
@@ -42,13 +49,14 @@ StaticRails.config do |config|
42
49
  # # The port the local development/test server should be reached on
43
50
  # server_port: "1313",
44
51
  #
45
- # # The root path on the local development/test server to which requests should be forwarded
52
+ # # The root path on the local development/test server to which requests
53
+ # # should be forwarded
46
54
  # server_path: "/",
47
55
  #
48
56
  # # The command to execute when building the static app for production
49
57
  # compile_command: "hugo",
50
58
  #
51
- # # The destination of the production-compiled assets, relative to Rails root
59
+ # # The destination of production-compiled assets, relative to Rails root
52
60
  # compile_dir: "static/blog/dist"
53
61
  # },
54
62
  ]
@@ -9,7 +9,7 @@ module StaticRails
9
9
  Dir.chdir(config.app.root.join(site.source_dir)) do
10
10
  Bundler.with_unbundled_env do
11
11
  puts "=> Compiling static site \"#{site.name}\" to #{site.compile_dir}"
12
- result = system site.compile_command
12
+ result = system(site.env, site.compile_command)
13
13
  unless result == true
14
14
  raise Error.new("Compilation of static site \"#{site.name}\" failed (in directory \"#{site.source_dir}\" with command: `#{site.compile_command}`)")
15
15
  end
@@ -46,7 +46,7 @@ module StaticRails
46
46
 
47
47
  Rails.logger.info "=> Starting #{@site.name} static server"
48
48
  Bundler.with_unbundled_env do
49
- Process.spawn(ENV, @site.server_command, options).tap do |pid|
49
+ Process.spawn(@site.env, @site.server_command, options).tap do |pid|
50
50
  Process.detach(pid)
51
51
  end
52
52
  end
@@ -6,6 +6,7 @@ module StaticRails
6
6
  :source_dir,
7
7
  :start_server,
8
8
  :ping_server,
9
+ :env,
9
10
  :server_command,
10
11
  :server_host,
11
12
  :server_port,
@@ -19,11 +20,13 @@ module StaticRails
19
20
  url_root_path: "/",
20
21
  start_server: !Rails.env.production?,
21
22
  ping_server: true,
23
+ env: {},
22
24
  server_host: "localhost",
23
25
  server_path: "/",
24
26
  **other_kwargs
25
27
  )
26
28
  @start_server = start_server
29
+ @env = env
27
30
  @server_host = server_host
28
31
  @server_path = server_path
29
32
  @ping_server = ping_server
@@ -1,3 +1,3 @@
1
1
  module StaticRails
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -8,7 +8,7 @@ module StaticRails
8
8
  loop do
9
9
  Socket.tcp(site.server_host, site.server_port, connect_timeout: 5)
10
10
  break
11
- rescue Errno::ECONNREFUSED
11
+ rescue Errno::ECONNREFUSED, Errno::EADDRNOTAVAIL
12
12
  elapsed = Time.new - start
13
13
  if elapsed > timeout
14
14
  raise Error.new("Static site server \"#{site.name}\" failed to start within #{timeout} seconds. You can change the timeout with `StaticRails.config.ping_server_timeout = 42`")
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: static-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Justin Searls
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-05-01 00:00:00.000000000 Z
11
+ date: 2020-05-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: railties