anycable-rails-core 1.4.0 → 1.4.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 +8 -0
- data/lib/anycable/rails/railtie.rb +10 -2
- data/lib/anycable/rails/version.rb +1 -1
- data/lib/generators/anycable/setup/USAGE +9 -0
- data/lib/generators/anycable/setup/setup_generator.rb +36 -52
- data/lib/generators/anycable/setup/templates/Procfile.dev.tt +4 -5
- data/lib/generators/anycable/setup/templates/bin/anycable-go.tt +22 -0
- data/lib/generators/anycable/setup/templates/config/anycable.yml.tt +3 -5
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d59e7b74ab037c4e2dfdf18b5fb289fad3f7eac9d1a08df798f656ed35dda95c
|
4
|
+
data.tar.gz: a1304fbd9db3f26c92ef5008b196135a2f09a5922bde5137d7e604e652250354
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8a7eebcf805f8c72c300b734fe52a7ce952b60527b8644f004ca7bb3414cc04da49b8ee2ce36d84f6f7d8bf0438450dfdffb019610b091894c3dcf7e65ec4897
|
7
|
+
data.tar.gz: 488065254235777ef04b781ef98f1c20c8c12f2f6c268c6044fb683e4a9774f1ae5abbdcbec53199065e57ec8df1df15d13f85c152471a5a54ceb23e6ddbd832
|
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,14 @@
|
|
2
2
|
|
3
3
|
## master
|
4
4
|
|
5
|
+
## 1.4.1 (2023-09-27)
|
6
|
+
|
7
|
+
- Fix compatibility with Rails 7.1. ([@palkan][])
|
8
|
+
|
9
|
+
- Upgrade `anycable:setup` generator to support v1.4 features. ([@palkan][])
|
10
|
+
|
11
|
+
Add `bin/anycable-go` to use `anycable-go` locally. Add `--rpc=http` to configure for using AnyCable with HTTP RPC.
|
12
|
+
|
5
13
|
## 1.4.0 (2023-07-07)
|
6
14
|
|
7
15
|
- Add HTTP RPC integration. ([@palkan][])
|
@@ -21,15 +21,23 @@ module AnyCable
|
|
21
21
|
|
22
22
|
AnyCable.configure_server do
|
23
23
|
server_logger = AnyCable.logger = ::ActionCable.server.config.logger
|
24
|
-
|
24
|
+
|
25
25
|
# Broadcast server logs to STDOUT in development
|
26
26
|
if ::Rails.env.development? &&
|
27
27
|
!ActiveSupport::Logger.logger_outputs_to?(::Rails.logger, $stdout)
|
28
28
|
console = ActiveSupport::Logger.new($stdout)
|
29
29
|
console.formatter = ::Rails.logger.formatter if ::Rails.logger.respond_to?(:formatter)
|
30
30
|
console.level = ::Rails.logger.level if ::Rails.logger.respond_to?(:level)
|
31
|
-
|
31
|
+
|
32
|
+
# Rails 7.1+
|
33
|
+
if defined?(ActiveSupport::BroadcastLogger)
|
34
|
+
AnyCable.logger = ActiveSupport::BroadcastLogger.new(AnyCable.logger, console)
|
35
|
+
else
|
36
|
+
AnyCable.logger.extend(ActiveSupport::Logger.broadcast(console))
|
37
|
+
end
|
32
38
|
end
|
39
|
+
|
40
|
+
AnyCable.logger = ActiveSupport::TaggedLogging.new(AnyCable.logger) if server_logger.is_a?(::Logger)
|
33
41
|
end
|
34
42
|
|
35
43
|
# Add tagging middleware
|
@@ -1,2 +1,11 @@
|
|
1
1
|
Description:
|
2
2
|
Configures your application to work with AnyCable interactively.
|
3
|
+
|
4
|
+
Example:
|
5
|
+
rails generate anycable:setup
|
6
|
+
|
7
|
+
# You can opt-in to use HTTP RPC
|
8
|
+
rails generate anycable:setup --rpc=http
|
9
|
+
|
10
|
+
# You can specify which version of anycable-go to use
|
11
|
+
rails generate anycable:setup --version=1.4
|
@@ -10,14 +10,15 @@ module AnyCableRailsGenerators
|
|
10
10
|
|
11
11
|
DOCS_ROOT = "https://docs.anycable.io"
|
12
12
|
DEVELOPMENT_METHODS = %w[skip local docker].freeze
|
13
|
-
|
13
|
+
RPC_IMPL = %w[grpc http].freeze
|
14
14
|
|
15
15
|
class_option :devenv,
|
16
16
|
type: :string,
|
17
17
|
desc: "Select your development environment (options: #{DEVELOPMENT_METHODS.join(", ")})"
|
18
|
-
class_option :
|
18
|
+
class_option :rpc,
|
19
19
|
type: :string,
|
20
|
-
desc: "
|
20
|
+
desc: "Select RPC implementation (options: #{RPC_IMPL.join(", ")})",
|
21
|
+
default: "grpc"
|
21
22
|
class_option :skip_heroku,
|
22
23
|
type: :boolean,
|
23
24
|
desc: "Do not copy Heroku configs"
|
@@ -30,12 +31,6 @@ module AnyCableRailsGenerators
|
|
30
31
|
class_option :skip_install,
|
31
32
|
type: :boolean,
|
32
33
|
desc: "Do not run bundle install when adding new gems"
|
33
|
-
|
34
|
-
include WithOSHelpers
|
35
|
-
|
36
|
-
class_option :bin_path,
|
37
|
-
type: :string,
|
38
|
-
desc: "Where to download AnyCable-Go server binary (default: #{DEFAULT_BIN_PATH})"
|
39
34
|
class_option :version,
|
40
35
|
type: :string,
|
41
36
|
desc: "Specify the AnyCable-Go version (defaults to latest release)"
|
@@ -99,6 +94,7 @@ module AnyCableRailsGenerators
|
|
99
94
|
|
100
95
|
in_root do
|
101
96
|
next unless File.file?("Procfile")
|
97
|
+
next if http_rpc?
|
102
98
|
|
103
99
|
contents = File.read("Procfile")
|
104
100
|
contents.sub!(/^web: (.*)$/, %q(web: [[ "$ANYCABLE_DEPLOYMENT" == "true" ]] && bundle exec anycable --server-command="anycable-go" || \1))
|
@@ -171,6 +167,10 @@ module AnyCableRailsGenerators
|
|
171
167
|
!!gemfile_lock&.match?(/^\s+rubocop\b/)
|
172
168
|
end
|
173
169
|
|
170
|
+
def http_rpc?
|
171
|
+
options[:rpc] == "http"
|
172
|
+
end
|
173
|
+
|
174
174
|
def gemfile_lock
|
175
175
|
@gemfile_lock ||= begin
|
176
176
|
res = nil
|
@@ -192,7 +192,7 @@ module AnyCableRailsGenerators
|
|
192
192
|
say <<~YML
|
193
193
|
─────────────────────────────────────────
|
194
194
|
ws:
|
195
|
-
image: anycable/anycable-go:1.
|
195
|
+
image: anycable/anycable-go:1.4
|
196
196
|
ports:
|
197
197
|
- '8080:8080'
|
198
198
|
environment:
|
@@ -223,33 +223,25 @@ module AnyCableRailsGenerators
|
|
223
223
|
end
|
224
224
|
|
225
225
|
def install_for_local
|
226
|
-
|
227
|
-
|
228
|
-
end
|
229
|
-
|
230
|
-
def install_server
|
231
|
-
answer = SERVER_SOURCES.index(options[:source]) || 99
|
232
|
-
|
233
|
-
until SERVER_SOURCES[answer.to_i]
|
234
|
-
answer = ask "How do you want to install AnyCable-Go WebSocket server? (1) Homebrew, (2) Download binary, (0) Skip"
|
226
|
+
inside("bin") do
|
227
|
+
template "anycable-go", chmod: 0o755
|
235
228
|
end
|
236
229
|
|
237
|
-
|
238
|
-
|
239
|
-
say_status :help, "⚠️ Please, read this guide on how to install AnyCable-Go server 👉 #{DOCS_ROOT}/anycable-go/getting_started", :yellow
|
240
|
-
return
|
241
|
-
else
|
242
|
-
return unless send("install_from_#{SERVER_SOURCES[answer.to_i]}")
|
230
|
+
if file_exists?(".gitignore")
|
231
|
+
append_file ".gitignore", "bin/dist\n"
|
243
232
|
end
|
244
233
|
|
245
|
-
|
234
|
+
template_proc_files
|
246
235
|
end
|
247
236
|
|
248
237
|
def template_proc_files
|
249
238
|
file_name = "Procfile.dev"
|
250
239
|
|
251
240
|
if file_exists?(file_name)
|
252
|
-
|
241
|
+
unless http_rpc?
|
242
|
+
append_file file_name, "anycable: bundle exec anycable\n", force: true
|
243
|
+
end
|
244
|
+
append_file file_name, "ws: bin/anycable-go #{anycable_go_options}", force: true
|
253
245
|
else
|
254
246
|
say_status :help, "💡 We recommend using Hivemind to manage multiple processes in development 👉 https://github.com/DarthSim/hivemind", :yellow
|
255
247
|
|
@@ -263,32 +255,11 @@ module AnyCableRailsGenerators
|
|
263
255
|
end
|
264
256
|
end
|
265
257
|
|
266
|
-
def install_from_brew
|
267
|
-
run "brew install anycable-go", abort_on_failure: true
|
268
|
-
run "anycable-go -v", abort_on_failure: true
|
269
|
-
end
|
270
|
-
|
271
|
-
def install_from_binary
|
272
|
-
bin_path ||= DEFAULT_BIN_PATH if options[:devenv] # User don't want interactive mode
|
273
|
-
bin_path ||= ask "Please, enter the path to download the AnyCable-Go binary to", default: DEFAULT_BIN_PATH, path: true
|
274
|
-
|
275
|
-
generate "anycable:download", download_options(bin_path: bin_path)
|
276
|
-
|
277
|
-
true
|
278
|
-
end
|
279
|
-
|
280
|
-
def download_options(**params)
|
281
|
-
opts = options.merge(params)
|
282
|
-
[].tap do |args|
|
283
|
-
args << "--os #{opts[:os]}" if opts[:os]
|
284
|
-
args << "--cpu #{opts[:cpu]}" if opts[:cpu]
|
285
|
-
args << "--bin-path=#{opts[:bin_path]}" if opts[:bin_path]
|
286
|
-
args << "--version #{opts[:version]}" if opts[:version]
|
287
|
-
end.join(" ")
|
288
|
-
end
|
289
|
-
|
290
258
|
def anycable_go_options
|
291
|
-
|
259
|
+
opts = ["--port=8080"]
|
260
|
+
opts << "--broadcast_adapter=http" unless redis?
|
261
|
+
opts << "--rpc_impl=http --rpc_host=http://localhost:3000/_anycable" if http_rpc?
|
262
|
+
opts.join(" ")
|
292
263
|
end
|
293
264
|
|
294
265
|
def file_exists?(name)
|
@@ -296,5 +267,18 @@ module AnyCableRailsGenerators
|
|
296
267
|
return File.file?(name)
|
297
268
|
end
|
298
269
|
end
|
270
|
+
|
271
|
+
def anycable_go_version
|
272
|
+
@anycable_go_version ||= (normalize_version(options[:version]) || "latest")
|
273
|
+
end
|
274
|
+
|
275
|
+
def normalize_version(version)
|
276
|
+
return unless version
|
277
|
+
|
278
|
+
# We need a full version for bin/anycable-go script
|
279
|
+
segments = Gem::Version.new(version).segments
|
280
|
+
segments << 0 until segments.size >= 3
|
281
|
+
segments.join(".")
|
282
|
+
end
|
299
283
|
end
|
300
284
|
end
|
@@ -1,6 +1,5 @@
|
|
1
|
-
|
2
|
-
<%-
|
3
|
-
assets: bundle exec bin/webpack-dev-server
|
4
|
-
<%- end -%>
|
1
|
+
web: bin/rails s
|
2
|
+
<%- unless http_rpc? -%>
|
5
3
|
anycable: bundle exec anycable
|
6
|
-
|
4
|
+
<%- end -%>
|
5
|
+
ws: bin/anycable-go <%= anycable_go_options %>
|
@@ -0,0 +1,22 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
|
3
|
+
cd $(dirname $0)/..
|
4
|
+
|
5
|
+
# It's recommended to use the exact version of AnyCable-Go here
|
6
|
+
version="<%= anycable_go_version %>"
|
7
|
+
|
8
|
+
if [ ! -f ./bin/dist/anycable-go ]; then
|
9
|
+
echo "AnyCable-go is not installed, downloading..."
|
10
|
+
./bin/rails g anycable:download --version=$version --bin-path=./bin/dist
|
11
|
+
fi
|
12
|
+
|
13
|
+
curVersion=$(./bin/dist/anycable-go -v)
|
14
|
+
|
15
|
+
if [[ "$version" != "latest" ]]; then
|
16
|
+
if [[ "$curVersion" != "$version"* ]]; then
|
17
|
+
echo "AnyCable-go version is not $version, downloading a new one..."
|
18
|
+
./bin/rails g anycable:download --version=$version --bin-path=./bin/dist
|
19
|
+
fi
|
20
|
+
fi
|
21
|
+
|
22
|
+
./bin/dist/anycable-go $@
|
@@ -32,6 +32,9 @@ default: &default
|
|
32
32
|
# Localhost is used by default.
|
33
33
|
# redis_url: "redis://localhost:6379/1"
|
34
34
|
<%- end -%>
|
35
|
+
<%- if http_rpc? -%>
|
36
|
+
http_rpc_mount_path: "/_anycable"
|
37
|
+
<%- end -%>
|
35
38
|
|
36
39
|
development:
|
37
40
|
<<: *default
|
@@ -41,8 +44,3 @@ test:
|
|
41
44
|
|
42
45
|
production:
|
43
46
|
<<: *default
|
44
|
-
<%- if !redis? && !nats? -%>
|
45
|
-
# Use Redis or NATS in production
|
46
|
-
broadcast_adapter: redis
|
47
|
-
# broadcast_adapter: nats
|
48
|
-
<%- end -%>
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: anycable-rails-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.4.
|
4
|
+
version: 1.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- palkan
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-09-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: anycable-core
|
@@ -92,6 +92,7 @@ files:
|
|
92
92
|
- lib/generators/anycable/setup/USAGE
|
93
93
|
- lib/generators/anycable/setup/setup_generator.rb
|
94
94
|
- lib/generators/anycable/setup/templates/Procfile.dev.tt
|
95
|
+
- lib/generators/anycable/setup/templates/bin/anycable-go.tt
|
95
96
|
- lib/generators/anycable/setup/templates/config/anycable.yml.tt
|
96
97
|
- lib/generators/anycable/setup/templates/config/cable.yml.tt
|
97
98
|
- lib/generators/anycable/setup/templates/config/initializers/anycable.rb.tt
|