fly.io-rails 0.1.6-x86-linux → 0.1.7-x86-linux
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/exe/x86-linux/flyctl +0 -0
- data/lib/fly.io-rails/actions.rb +19 -2
- data/lib/fly.io-rails/dsl.rb +22 -22
- data/lib/fly.io-rails/scanner.rb +3 -1
- data/lib/fly.io-rails/version.rb +1 -1
- data/lib/generators/fly/app_generator.rb +3 -0
- data/lib/generators/templates/Dockerfile.erb +19 -1
- data/lib/generators/templates/Procfile.fly.erb +2 -3
- data/lib/generators/templates/fly.rake.erb +2 -2
- data/lib/generators/templates/fly.toml.erb +7 -2
- data/lib/generators/templates/hook_detached_process.erb +11 -0
- data/lib/generators/templates/nginx.conf.erb +29 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7446a6c96344adba0e4f325b14889be29591727d0e643f4a404bd1e25d74742c
|
4
|
+
data.tar.gz: a85b007e411e01dd2b51140ad9b7dcaf37c3c712401b04f074d7f19f8dd07428
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8d1c38b440997f1fa257ed5dcead256884431c3d7409e244d39982ae27ce016919ee4414f0491781585ae09cf324490e01820e3d0c76da59abfa3eb830207f08
|
7
|
+
data.tar.gz: 384eedc07657beab1bf40bf17f3ddc9f018f8bc6ba5d868ed902cc6e628d1918374a4d9c342a064c35c7a86f4c11f536f4e81a1b2ee9c3157b566d659ccb6c69
|
data/exe/x86-linux/flyctl
CHANGED
Binary file
|
data/lib/fly.io-rails/actions.rb
CHANGED
@@ -26,8 +26,10 @@ module Fly
|
|
26
26
|
regions = options[:region]&.flatten || []
|
27
27
|
@litefs = options[:litefs]
|
28
28
|
@nomad = options[:nomad]
|
29
|
+
@passenger = options[:passenger]
|
30
|
+
@serverless = options[:serverless]
|
29
31
|
|
30
|
-
# prepare template
|
32
|
+
# prepare template variables
|
31
33
|
@ruby_version = RUBY_VERSION
|
32
34
|
@bundler_version = Bundler::VERSION
|
33
35
|
@node = File.exist? 'node_modules'
|
@@ -56,6 +58,11 @@ module Fly
|
|
56
58
|
|
57
59
|
# set additional variables based on application source
|
58
60
|
scan_rails_app
|
61
|
+
|
62
|
+
# determine processes
|
63
|
+
@procs = {web: 'bin/rails server'}
|
64
|
+
@procs[:web] = "nginx -g 'daemon off;'" if @passenger
|
65
|
+
@procs[:worker] = 'bundle exec sidekiq' if @sidekiq
|
59
66
|
end
|
60
67
|
|
61
68
|
def app
|
@@ -91,6 +98,16 @@ module Fly
|
|
91
98
|
app_template 'dockerignore.erb', '.dockerignore'
|
92
99
|
end
|
93
100
|
|
101
|
+
def generate_nginx_conf
|
102
|
+
return unless @passenger
|
103
|
+
app_template 'nginx.conf.erb', 'config/nginx.conf'
|
104
|
+
|
105
|
+
if @serverless
|
106
|
+
app_template 'hook_detached_process.erb', 'config/hook_detached_process'
|
107
|
+
FileUtils.chmod 'u+x', 'config/hook_detached_process'
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
94
111
|
def generate_terraform
|
95
112
|
app_template 'main.tf.erb', 'main.tf'
|
96
113
|
end
|
@@ -100,7 +117,7 @@ module Fly
|
|
100
117
|
end
|
101
118
|
|
102
119
|
def generate_procfile
|
103
|
-
return unless @
|
120
|
+
return unless @procs.length > 1
|
104
121
|
app_template 'Procfile.fly.erb', 'Procfile.fly'
|
105
122
|
end
|
106
123
|
|
data/lib/fly.io-rails/dsl.rb
CHANGED
@@ -2,26 +2,26 @@ module Fly
|
|
2
2
|
module DSL
|
3
3
|
class Base
|
4
4
|
def initialize
|
5
|
-
|
5
|
+
@value = {}
|
6
6
|
end
|
7
7
|
|
8
8
|
def self.option name, default=nil
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
9
|
+
@options ||= {}
|
10
|
+
@options[name] = default
|
11
|
+
|
12
|
+
define_method name do |*args|
|
13
|
+
if args.length == 1
|
14
|
+
@value[name] = args.first
|
15
|
+
elsif args.length > 1
|
16
|
+
raise ArgumentError.new("wrong number of arguments (given #{args.length}, expected 0..1)")
|
17
|
+
end
|
18
|
+
|
19
|
+
@value.include?(name) ? @value[name] : default
|
20
|
+
end
|
21
21
|
end
|
22
22
|
|
23
23
|
def self.options
|
24
|
-
|
24
|
+
@options ||= {}
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
@@ -53,21 +53,21 @@ module Fly
|
|
53
53
|
@@blocks = {}
|
54
54
|
|
55
55
|
def initialize
|
56
|
-
|
56
|
+
@config = {}
|
57
57
|
end
|
58
58
|
|
59
59
|
def self.block name, kind
|
60
|
-
|
60
|
+
@@blocks[name] = kind
|
61
61
|
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
62
|
+
define_method name do |&block|
|
63
|
+
@config[name] ||= kind.new
|
64
|
+
@config[name].instance_eval(&block) if block
|
65
|
+
@config[name]
|
66
|
+
end
|
67
67
|
end
|
68
68
|
|
69
69
|
def self.blocks
|
70
|
-
|
70
|
+
@@blocks
|
71
71
|
end
|
72
72
|
|
73
73
|
block :machine, Machine
|
data/lib/fly.io-rails/scanner.rb
CHANGED
@@ -14,8 +14,10 @@ module Fly
|
|
14
14
|
|
15
15
|
@sidekiq = IO.read('Gemfile').include? 'sidekiq' rescue false
|
16
16
|
|
17
|
+
@cable = ! Dir['app/channels/*.rb'].empty?
|
18
|
+
|
17
19
|
if (YAML.load_file('config/cable.yml').dig('production', 'adapter') rescue false)
|
18
|
-
@redis_cable =
|
20
|
+
@redis_cable = @cable
|
19
21
|
end
|
20
22
|
|
21
23
|
if (IO.read('config/environments/production.rb') =~ /redis/i rescue false)
|
data/lib/fly.io-rails/version.rb
CHANGED
@@ -10,6 +10,8 @@ class AppGenerator < Rails::Generators::Base
|
|
10
10
|
class_option :nomad, type: :boolean, default: false
|
11
11
|
|
12
12
|
class_option :litefs, type: :boolean, default: false
|
13
|
+
class_option :passenger, type: :boolean, default: false
|
14
|
+
class_option :serverless, type: :boolean, default: false
|
13
15
|
|
14
16
|
def generate_app
|
15
17
|
source_paths.push File.expand_path('../templates', __dir__)
|
@@ -22,6 +24,7 @@ class AppGenerator < Rails::Generators::Base
|
|
22
24
|
action.generate_fly_config unless File.exist? 'config/fly.rb'
|
23
25
|
action.generate_dockerfile unless File.exist? 'Dockerfile'
|
24
26
|
action.generate_dockerignore unless File.exist? '.dockerignore'
|
27
|
+
action.generate_nginx_conf unless File.exist? 'config/nginx.conf'
|
25
28
|
action.generate_raketask unless File.exist? 'lib/tasks/fly.rake'
|
26
29
|
action.generate_procfile unless File.exist? 'Procfile.rake'
|
27
30
|
action.generate_litefs if options[:litefs] and not File.exist? 'config/litefs'
|
@@ -81,7 +81,7 @@ RUN gem update --system --no-document && \
|
|
81
81
|
|
82
82
|
COPY Gemfile* ./
|
83
83
|
RUN bundle install && rm -rf vendor/bundle/ruby/*/cache
|
84
|
-
<% if @
|
84
|
+
<% if @procs.length > 1 -%>
|
85
85
|
RUN gem install foreman
|
86
86
|
<% end -%>
|
87
87
|
|
@@ -115,6 +115,7 @@ FROM base
|
|
115
115
|
|
116
116
|
<%
|
117
117
|
@deploy_packages = %w(file vim curl gzip)
|
118
|
+
@deploy_packages += %w(nginx passenger libnginx-mod-http-passenger) if @passenger
|
118
119
|
@deploy_packages << 'postgresql-client' if @postgresql
|
119
120
|
@deploy_packages << 'libsqlite3-0' if @sqlite3
|
120
121
|
@deploy_packages << 'fuse' if @litefs
|
@@ -122,6 +123,13 @@ FROM base
|
|
122
123
|
ARG DEPLOY_PACKAGES=<%= @deploy_packages.join(' ').inspect %>
|
123
124
|
ENV DEPLOY_PACKAGES=${DEPLOY_PACKAGES}
|
124
125
|
|
126
|
+
<% if @passenger -%>
|
127
|
+
RUN apt-get install -y dirmngr gnupg apt-transport-https ca-certificates curl && \
|
128
|
+
curl https://oss-binaries.phusionpassenger.com/auto-software-signing-gpg-key.txt | \
|
129
|
+
gpg --dearmor > /etc/apt/trusted.gpg.d/phusion.gpg && \
|
130
|
+
sh -c 'echo deb https://oss-binaries.phusionpassenger.com/apt/passenger bullseye main > /etc/apt/sources.list.d/passenger.list'
|
131
|
+
|
132
|
+
<% end -%>
|
125
133
|
RUN --mount=type=cache,id=prod-apt-cache,sharing=locked,target=/var/cache/apt \
|
126
134
|
--mount=type=cache,id=prod-apt-lib,sharing=locked,target=/var/lib/apt \
|
127
135
|
apt-get update -qq && \
|
@@ -150,6 +158,16 @@ ADD config/litefs.yml /etc/litefs.yml
|
|
150
158
|
RUN mkdir /data
|
151
159
|
<% end -%>
|
152
160
|
#######################################################################
|
161
|
+
<% if @passenger -%>
|
162
|
+
|
163
|
+
# configure nginx/passenger
|
164
|
+
COPY config/nginx.conf /etc/nginx/sites-available/rails.conf
|
165
|
+
RUN rm /etc/nginx/sites-enabled/default && \
|
166
|
+
ln -s /etc/nginx/sites-available/rails.conf /etc/nginx/sites-enabled/
|
167
|
+
<% if @serverless -%>
|
168
|
+
COPY config/hook_detached_process /etc/nginx/
|
169
|
+
<% end -%>
|
170
|
+
<% end -%>
|
153
171
|
|
154
172
|
# Deploy your application
|
155
173
|
COPY . .
|
@@ -28,12 +28,12 @@ namespace :fly do
|
|
28
28
|
<%- else -%>
|
29
29
|
task :server => :swapfile do
|
30
30
|
<%- end -%>
|
31
|
-
<%- if @
|
31
|
+
<%- if @procs.length > 1 -%>
|
32
32
|
Bundler.with_original_env do
|
33
33
|
sh 'foreman start --procfile=Procfile.fly'
|
34
34
|
end
|
35
35
|
<%- else -%>
|
36
|
-
sh
|
36
|
+
sh <%= @procs.values.first.inspect %>
|
37
37
|
<%- end -%>
|
38
38
|
end
|
39
39
|
|
@@ -25,8 +25,8 @@ processes = []
|
|
25
25
|
<% end -%>
|
26
26
|
|
27
27
|
[mounts]
|
28
|
-
source = <%= "#{app.gsub('-', '_')}_volume".inspect %>
|
29
|
-
destination = "/mnt/volume"
|
28
|
+
source = <%= "#{app.gsub('-', '_')}_volume".inspect %>
|
29
|
+
destination = "/mnt/volume"
|
30
30
|
<% end -%>
|
31
31
|
|
32
32
|
[experimental]
|
@@ -43,8 +43,13 @@ destination = "/mnt/volume"
|
|
43
43
|
protocol = "tcp"
|
44
44
|
script_checks = []
|
45
45
|
[services.concurrency]
|
46
|
+
<% if @cable -%>
|
47
|
+
hard_limit = 2500
|
48
|
+
soft_limit = 2000
|
49
|
+
<% else -%>
|
46
50
|
hard_limit = 25
|
47
51
|
soft_limit = 20
|
52
|
+
<% end -%>
|
48
53
|
type = "connections"
|
49
54
|
|
50
55
|
[[services.ports]]
|
@@ -0,0 +1,11 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
status = `passenger-status`
|
4
|
+
|
5
|
+
processes = status[/^Processes\s*:\s*(\d*)/, 1].to_i
|
6
|
+
<% if @cable -%>
|
7
|
+
cable = status[/^<%= @app %>-cable.*?\n\n/m]
|
8
|
+
processes -= 1 if cable and cable =~ /Sessions:\s*[1-9]/
|
9
|
+
<% end -%>
|
10
|
+
|
11
|
+
system 'nginx -s stop' if processes == 0
|
@@ -0,0 +1,29 @@
|
|
1
|
+
<% if @serverless -%>
|
2
|
+
passenger_ctl hook_detached_process /etc/nginx/hook_detached_process;
|
3
|
+
passenger_min_instances 0;
|
4
|
+
passenger_pool_idle_time 300;
|
5
|
+
|
6
|
+
<% end -%>
|
7
|
+
server {
|
8
|
+
listen 8080;
|
9
|
+
server_name <%= @app %>.fly.dev;
|
10
|
+
root /app/public;
|
11
|
+
|
12
|
+
passenger_enabled on;
|
13
|
+
passenger_ruby /usr/lib/fullstaq-ruby/versions/<%= @ruby_version %>-jemalloc/bin/ruby;
|
14
|
+
|
15
|
+
<% if @cable -%>
|
16
|
+
location / {
|
17
|
+
passenger_app_group_name <%= @app%>;
|
18
|
+
}
|
19
|
+
|
20
|
+
location /cable {
|
21
|
+
passenger_app_group_name <%= @app%>-cable;
|
22
|
+
passenger_force_max_concurrent_requests_per_process 0;
|
23
|
+
}
|
24
|
+
|
25
|
+
<% end -%>
|
26
|
+
# Nginx has a default limit of 1 MB for request bodies, which also applies
|
27
|
+
# to file uploads. The following line enables uploads of up to 50 MB:
|
28
|
+
client_max_body_size 50M;
|
29
|
+
}
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fly.io-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.7
|
5
5
|
platform: x86-linux
|
6
6
|
authors:
|
7
7
|
- Sam Ruby
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-10-
|
11
|
+
date: 2022-10-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: fly-ruby
|
@@ -68,8 +68,10 @@ files:
|
|
68
68
|
- lib/generators/templates/fly.rake.erb
|
69
69
|
- lib/generators/templates/fly.rb.erb
|
70
70
|
- lib/generators/templates/fly.toml.erb
|
71
|
+
- lib/generators/templates/hook_detached_process.erb
|
71
72
|
- lib/generators/templates/litefs.yml.erb
|
72
73
|
- lib/generators/templates/main.tf.erb
|
74
|
+
- lib/generators/templates/nginx.conf.erb
|
73
75
|
- lib/generators/templates/patches/action_cable.rb
|
74
76
|
- lib/tasks/fly.rake
|
75
77
|
homepage: https://github.com/rubys/fly-io.rails
|