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: '[email protected]'
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'