Core Modules

Active Record

--skip-active-record [-O]

Cable

--skip-action-cable [-C]

# app/channels/application_cable/channel.rb

module ApplicationCable
  class Channel < ActionCable::Channel::Base
  end
end
# app/channels/application_cable/connection.rb

module ApplicationCable
  class Connection < ActionCable::Connection::Base
  end
end
// app/javascript/channels/consumer.js

import { createConsumer } from '@rails/actioncable'

export default createConsumer()
// app/javascript/channels/index.js

const channels = require.context('.', true, /_channel\.js$/)

channels.keys().forEach(channels)
// app/javascript/packs/application.js

require('channels')
# config/application.rb

require 'action_cable/engine'
# config/cable.yml

development:
  adapter: async

test:
  adapter: test

production:
  adapter: redis
  url: <%= ENV.fetch("REDIS_URL") { 'redis://localhost:6379/1' } %>
  channel_prefix: my_app_production
# config/environments/production.rb

class Application < Rails::Application
  # Mount Action Cable outside main process or domain.
  # config.action_cable.mount_path = nil
  # config.action_cable.url = 'wss://example.com/cable'
  # config.action_cable.allowed_request_origins = [ 'http://example.com', /http:\/\/example.*/ ]
end
# test/channels/application_cable/connection_test.rb

require 'test_helper'

class ApplicationCable::ConnectionTest < ActionCable::Connection::TestCase
end
# Gemfile

gem 'redis', '~> 4.0'
// package.json

{
  "dependencies": {
    "@rails/actioncable": "^6.0.0"
  }
}

Mailer

--skip-action-mailer [-M]

ActionMailer will add a folder: test/mailers

# app/mailers/application_mailer.rb

class ApplicationMailer < ActionMailer::Base
  default from: 'from@example.com'
  layout 'mailer'
end
<!-- app/views/layouts/mailer.html.erb -->

<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <style>
    </style>
  </head>
  <body>
    <%= yield %>
  </body>
</html>
# app/views/layouts/mailer.text.erb

<%= yield %>
# config/application.rb

require 'action_mailer/railtie'
# config/environments/development.rb

class Application < Rails::Application
  config.action_mailer.raise_delivery_errors = false
  config.action_mailer.perform_caching = false
end
# config/environments/production.rb

class Application < Rails::Application
  config.action_mailer.perform_caching = false
  # config.action_mailer.raise_delivery_errors = false
end
# config/environments/test.rb

class Application < Rails::Application
  config.action_mailer.perform_caching = false
  config.action_mailer.delivery_method = :test
end

Mailbox

--skip-action-mailbox

ActionMailbox depends on ActiveStorage

# config/application.rb

# require 'active_storage/engine'
require 'action_mailbox/engine'

Storage

--skip-active-storage

ActiveStorage will add two folders: storage and tmp/storage

// app/javascript/packs/application.js

require('@rails/activestorage').start()

ActionMailbox and ActionText depend on ActiveStorage

# config/application.rb

require 'active_storage/engine'
# require 'action_mailbox/engine'
# require 'action_text/engine'
# config/environments/development.rb

class Application < Rails::Application
  config.active_storage.service = :local
end
# config/environments/production.rb

class Application < Rails::Application
  config.active_storage.service = :local
end
# config/environments/test.rb

class Application < Rails::Application
  config.active_storage.service = :test
end
# config/storage.yml

local:
  service: Disk
  root: <%= Rails.root.join('storage') %>

test:
  service: Disk
  root: <%= Rails.root.join('tmp/storage') %>
# .gitignore

/storage/*
!/storage/.keep
# Gemfile

# gem 'image_processing', '~> 1.2'
// package.json

{
  "dependencies": {
    "@rails/activestorage": "^6.0.0"
  }
}

Text

--skip-action-text

ActionText depends on ActiveStorage

# config/application.rb

# require 'active_storage/engine'
require 'action_text/engine'

Last updated