hotwired / turbo-rails

Use Turbo in your Ruby on Rails app
https://turbo.hotwired.dev
MIT License
2.03k stars 305 forks source link

ActionCable can probably be an optional dependency #412

Closed nfedyashev closed 1 year ago

nfedyashev commented 1 year ago

I'm not using action_cable in my existing Rails project(require "action_cable/engine" is commented out in config/application.rb).

/Users/nikita/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/turbo-rails-0.5.9/app/channels/turbo/streams_channel.rb:7:in `<main>': uninitialized constant ActionCable (NameError)

class Turbo::StreamsChannel < ActionCable::Channel::Base
                              ^^^^^^^^^^^
Did you mean?  ActionMailer
    from /Users/nikita/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/bootsnap-1.12.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:30:in `require'
    from /Users/nikita/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/bootsnap-1.12.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:30:in `require'
    from /Users/nikita/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/zeitwerk-2.6.4/lib/zeitwerk/kernel.rb:30:in `require'
    from /Users/nikita/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/zeitwerk-2.6.4/lib/zeitwerk/loader/helpers.rb:137:in `const_get'
    from /Users/nikita/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/zeitwerk-2.6.4/lib/zeitwerk/loader/helpers.rb:137:in `cget'
    from /Users/nikita/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/zeitwerk-2.6.4/lib/zeitwerk/loader/eager_load.rb:164:in `block in actual_eager_load_dir'
    from /Users/nikita/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/zeitwerk-2.6.4/lib/zeitwerk/loader/helpers.rb:42:in `block in ls'
    from /Users/nikita/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/zeitwerk-2.6.4/lib/zeitwerk/loader/helpers.rb:27:in `each'
    from /Users/nikita/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/zeitwerk-2.6.4/lib/zeitwerk/loader/helpers.rb:27:in `ls'
    from /Users/nikita/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/zeitwerk-2.6.4/lib/zeitwerk/loader/eager_load.rb:159:in `actual_eager_load_dir'
    from /Users/nikita/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/zeitwerk-2.6.4/lib/zeitwerk/loader/eager_load.rb:16:in `block (2 levels) in eager_load'
    from /Users/nikita/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/zeitwerk-2.6.4/lib/zeitwerk/loader/eager_load.rb:15:in `each'
    from /Users/nikita/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/zeitwerk-2.6.4/lib/zeitwerk/loader/eager_load.rb:15:in `block in eager_load'
    from /Users/nikita/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/zeitwerk-2.6.4/lib/zeitwerk/loader/eager_load.rb:10:in `synchronize'
    from /Users/nikita/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/zeitwerk-2.6.4/lib/zeitwerk/loader/eager_load.rb:10:in `eager_load'
    from /Users/nikita/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/railties-6.1.6/lib/rails/autoloaders.rb:31:in `each'
    from /Users/nikita/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/railties-6.1.6/lib/rails/application.rb:517:in `eager_load!'
    from /Users/nikita/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/railties-6.1.6/lib/rails/engine.rb:358:in `eager_load!'
    from /Users/nikita/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/annotate-3.2.0/lib/annotate.rb:98:in `eager_load'
    from /Users/nikita/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/annotate-3.2.0/bin/annotate:29:in `<top (required)>'
    from /Users/nikita/.rbenv/versions/3.1.2/bin/annotate:25:in `load'
    from /Users/nikita/.rbenv/versions/3.1.2/bin/annotate:25:in `<top (required)>'
    from /Users/nikita/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/bundler-2.3.16/lib/bundler/cli/exec.rb:58:in `load'
    from /Users/nikita/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/bundler-2.3.16/lib/bundler/cli/exec.rb:58:in `kernel_load'
    from /Users/nikita/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/bundler-2.3.16/lib/bundler/cli/exec.rb:23:in `run'
    from /Users/nikita/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/bundler-2.3.16/lib/bundler/cli.rb:479:in `exec'
    from /Users/nikita/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/bundler-2.3.16/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
    from /Users/nikita/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/bundler-2.3.16/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
    from /Users/nikita/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/bundler-2.3.16/lib/bundler/vendor/thor/lib/thor.rb:392:in `dispatch'
    from /Users/nikita/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/bundler-2.3.16/lib/bundler/cli.rb:31:in `dispatch'
    from /Users/nikita/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/bundler-2.3.16/lib/bundler/vendor/thor/lib/thor/base.rb:485:in `start'
    from /Users/nikita/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/bundler-2.3.16/lib/bundler/cli.rb:25:in `start'
    from /Users/nikita/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/bundler-2.3.16/exe/bundle:48:in `block in <top (required)>'
    from /Users/nikita/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/bundler-2.3.16/lib/bundler/friendly_errors.rb:117:in `with_friendly_errors'
    from /Users/nikita/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/bundler-2.3.16/exe/bundle:36:in `<top (required)>'
    from /Users/nikita/.rbenv/versions/3.1.2/bin/bundle:25:in `load'
    from /Users/nikita/.rbenv/versions/3.1.2/bin/bundle:25:in `<main>'

As a workaround, I restored action_cable explicit requiring.

dhh commented 1 year ago

You don't need to use this integration gem to use Turbo. But the bulk of this gem is about dealing with Turbo Streams, which requires Action Cable to work. So don't see the point in making that optional. Just use Turbo directly if that's better for you 👍