Skip to content

Commit

Permalink
Merge pull request #30101 from bogdanvlviv/initialization-active_storage
Browse files Browse the repository at this point in the history
Provide initialization of Active Storage
  • Loading branch information
rafaelfranca committed Nov 6, 2017
2 parents 256a44c + cb8553c commit 63f0c04
Show file tree
Hide file tree
Showing 34 changed files with 385 additions and 104 deletions.
2 changes: 0 additions & 2 deletions activejob/test/support/integration/dummy_app_template.rb
Expand Up @@ -4,8 +4,6 @@
generate "delayed_job:active_record", "--quiet"
end

rails_command("db:migrate")

initializer "activejob.rb", <<-CODE
require "#{File.expand_path("jobs_manager.rb", __dir__)}"
JobsManager.current_manager.setup
Expand Down
1 change: 1 addition & 0 deletions activejob/test/support/integration/helper.rb
Expand Up @@ -18,6 +18,7 @@
require "#{dummy_app_path}/config/environment.rb"

ActiveRecord::Migrator.migrations_paths = [ Rails.root.join("db/migrate").to_s ]
ActiveRecord::Tasks::DatabaseTasks.migrate
require "rails/test_help"

Rails.backtrace_cleaner.remove_silencers!
Expand Down
6 changes: 6 additions & 0 deletions railties/CHANGELOG.md
@@ -1,3 +1,9 @@
* `rails new` and `rails plugin new` get `Active Storage` by default.
Add ability to skip `Active Storage` with `--skip-active-storage`
and do so automatically when `--skip-active-record` is used.

*bogdanvlviv*

* Gemfile for new apps: upgrade redis-rb from ~> 3.0 to 4.0.

*Jeremy Daer*
Expand Down
2 changes: 1 addition & 1 deletion railties/lib/rails/all.rb
Expand Up @@ -4,12 +4,12 @@

%w(
active_record/railtie
active_storage/engine
action_controller/railtie
action_view/railtie
action_mailer/railtie
active_job/railtie
action_cable/engine
active_storage/engine
rails/test_unit/railtie
sprockets/railtie
).each do |railtie|
Expand Down
11 changes: 6 additions & 5 deletions railties/lib/rails/app_updater.rb
Expand Up @@ -21,11 +21,12 @@ def app_generator
private
def generator_options
options = { api: !!Rails.application.config.api_only, update: true }
options[:skip_active_record] = !defined?(ActiveRecord::Railtie)
options[:skip_action_mailer] = !defined?(ActionMailer::Railtie)
options[:skip_action_cable] = !defined?(ActionCable::Engine)
options[:skip_sprockets] = !defined?(Sprockets::Railtie)
options[:skip_puma] = !defined?(Puma)
options[:skip_active_record] = !defined?(ActiveRecord::Railtie)
options[:skip_active_storage] = !defined?(ActiveStorage::Engine) || !defined?(ActiveRecord::Railtie)
options[:skip_action_mailer] = !defined?(ActionMailer::Railtie)
options[:skip_action_cable] = !defined?(ActionCable::Engine)
options[:skip_sprockets] = !defined?(Sprockets::Railtie)
options[:skip_puma] = !defined?(Puma)
options
end
end
Expand Down
8 changes: 7 additions & 1 deletion railties/lib/rails/generators/actions.rb
Expand Up @@ -221,6 +221,7 @@ def generate(what, *args)
# rake("db:migrate")
# rake("db:migrate", env: "production")
# rake("gems:install", sudo: true)
# rake("gems:install", capture: true)
def rake(command, options = {})
execute_command :rake, command, options
end
Expand All @@ -230,6 +231,7 @@ def rake(command, options = {})
# rails_command("db:migrate")
# rails_command("db:migrate", env: "production")
# rails_command("gems:install", sudo: true)
# rails_command("gems:install", capture: true)
def rails_command(command, options = {})
execute_command :rails, command, options
end
Expand Down Expand Up @@ -292,7 +294,11 @@ def execute_command(executor, command, options = {}) # :doc:
log executor, command
env = options[:env] || ENV["RAILS_ENV"] || "development"
sudo = options[:sudo] && !Gem.win_platform? ? "sudo " : ""
in_root { run("#{sudo}#{extify(executor)} #{command} RAILS_ENV=#{env}", verbose: false) }
config = { verbose: false }

config.merge!(capture: options[:capture]) if options[:capture]

in_root { run("#{sudo}#{extify(executor)} #{command} RAILS_ENV=#{env}", config) }
end

# Add an extension to the given name based on the platform.
Expand Down
129 changes: 80 additions & 49 deletions railties/lib/rails/generators/app_base.rb
Expand Up @@ -26,75 +26,78 @@ def self.strict_args_position
end

def self.add_shared_options_for(name)
class_option :template, type: :string, aliases: "-m",
desc: "Path to some #{name} template (can be a filesystem path or URL)"
class_option :template, type: :string, aliases: "-m",
desc: "Path to some #{name} template (can be a filesystem path or URL)"

class_option :database, type: :string, aliases: "-d", default: "sqlite3",
desc: "Preconfigure for selected database (options: #{DATABASES.join('/')})"
class_option :database, type: :string, aliases: "-d", default: "sqlite3",
desc: "Preconfigure for selected database (options: #{DATABASES.join('/')})"

class_option :skip_yarn, type: :boolean, default: false,
desc: "Don't use Yarn for managing JavaScript dependencies"
class_option :skip_yarn, type: :boolean, default: false,
desc: "Don't use Yarn for managing JavaScript dependencies"

class_option :skip_gemfile, type: :boolean, default: false,
desc: "Don't create a Gemfile"
class_option :skip_gemfile, type: :boolean, default: false,
desc: "Don't create a Gemfile"

class_option :skip_git, type: :boolean, aliases: "-G", default: false,
desc: "Skip .gitignore file"
class_option :skip_git, type: :boolean, aliases: "-G", default: false,
desc: "Skip .gitignore file"

class_option :skip_keeps, type: :boolean, default: false,
desc: "Skip source control .keep files"
class_option :skip_keeps, type: :boolean, default: false,
desc: "Skip source control .keep files"

class_option :skip_action_mailer, type: :boolean, aliases: "-M",
default: false,
desc: "Skip Action Mailer files"
class_option :skip_action_mailer, type: :boolean, aliases: "-M",
default: false,
desc: "Skip Action Mailer files"

class_option :skip_active_record, type: :boolean, aliases: "-O", default: false,
desc: "Skip Active Record files"
class_option :skip_active_record, type: :boolean, aliases: "-O", default: false,
desc: "Skip Active Record files"

class_option :skip_puma, type: :boolean, aliases: "-P", default: false,
desc: "Skip Puma related files"
class_option :skip_active_storage, type: :boolean, default: false,
desc: "Skip Active Storage files"

class_option :skip_action_cable, type: :boolean, aliases: "-C", default: false,
desc: "Skip Action Cable files"
class_option :skip_puma, type: :boolean, aliases: "-P", default: false,
desc: "Skip Puma related files"

class_option :skip_sprockets, type: :boolean, aliases: "-S", default: false,
desc: "Skip Sprockets files"
class_option :skip_action_cable, type: :boolean, aliases: "-C", default: false,
desc: "Skip Action Cable files"

class_option :skip_spring, type: :boolean, default: false,
desc: "Don't install Spring application preloader"
class_option :skip_sprockets, type: :boolean, aliases: "-S", default: false,
desc: "Skip Sprockets files"

class_option :skip_listen, type: :boolean, default: false,
desc: "Don't generate configuration that depends on the listen gem"
class_option :skip_spring, type: :boolean, default: false,
desc: "Don't install Spring application preloader"

class_option :skip_coffee, type: :boolean, default: false,
desc: "Don't use CoffeeScript"
class_option :skip_listen, type: :boolean, default: false,
desc: "Don't generate configuration that depends on the listen gem"

class_option :skip_javascript, type: :boolean, aliases: "-J", default: false,
desc: "Skip JavaScript files"
class_option :skip_coffee, type: :boolean, default: false,
desc: "Don't use CoffeeScript"

class_option :skip_turbolinks, type: :boolean, default: false,
desc: "Skip turbolinks gem"
class_option :skip_javascript, type: :boolean, aliases: "-J", default: false,
desc: "Skip JavaScript files"

class_option :skip_test, type: :boolean, aliases: "-T", default: false,
desc: "Skip test files"
class_option :skip_turbolinks, type: :boolean, default: false,
desc: "Skip turbolinks gem"

class_option :skip_system_test, type: :boolean, default: false,
desc: "Skip system test files"
class_option :skip_test, type: :boolean, aliases: "-T", default: false,
desc: "Skip test files"

class_option :dev, type: :boolean, default: false,
desc: "Setup the #{name} with Gemfile pointing to your Rails checkout"
class_option :skip_system_test, type: :boolean, default: false,
desc: "Skip system test files"

class_option :edge, type: :boolean, default: false,
desc: "Setup the #{name} with Gemfile pointing to Rails repository"
class_option :dev, type: :boolean, default: false,
desc: "Setup the #{name} with Gemfile pointing to your Rails checkout"

class_option :rc, type: :string, default: nil,
desc: "Path to file containing extra configuration options for rails command"
class_option :edge, type: :boolean, default: false,
desc: "Setup the #{name} with Gemfile pointing to Rails repository"

class_option :no_rc, type: :boolean, default: false,
desc: "Skip loading of extra configuration options from .railsrc file"
class_option :rc, type: :string, default: nil,
desc: "Path to file containing extra configuration options for rails command"

class_option :help, type: :boolean, aliases: "-h", group: :rails,
desc: "Show this help message and quit"
class_option :no_rc, type: :boolean, default: false,
desc: "Skip loading of extra configuration options from .railsrc file"

class_option :help, type: :boolean, aliases: "-h", group: :rails,
desc: "Show this help message and quit"
end

def initialize(*args)
Expand Down Expand Up @@ -193,11 +196,29 @@ def webserver_gemfile_entry # :doc:
end

def include_all_railties? # :doc:
options.values_at(:skip_active_record, :skip_action_mailer, :skip_test, :skip_sprockets, :skip_action_cable).none?
[
options.values_at(
:skip_active_record,
:skip_action_mailer,
:skip_test,
:skip_sprockets,
:skip_action_cable
),
skip_active_storage?
].flatten.none?
end

def comment_if(value) # :doc:
options[value] ? "# " : ""
question = "#{value}?"

comment =
if respond_to?(question, true)
send(question)
else
options[value]
end

comment ? "# " : ""
end

def keeps? # :doc:
Expand All @@ -208,6 +229,10 @@ def sqlite3? # :doc:
!options[:skip_active_record] && options[:database] == "sqlite3"
end

def skip_active_storage? # :doc:
options[:skip_active_storage] || options[:skip_active_record]
end

class GemfileEntry < Struct.new(:name, :version, :comment, :options, :commented_out)
def initialize(name, version, comment, options = {}, commented_out = false)
super
Expand Down Expand Up @@ -434,6 +459,12 @@ def generate_spring_binstubs
end
end

def run_active_storage
unless skip_active_storage?
rails_command "active_storage:install", capture: options[:quiet]
end
end

def empty_directory_with_keep_file(destination, config = {})
empty_directory(destination, config)
keep_file(destination)
Expand Down
9 changes: 7 additions & 2 deletions railties/lib/rails/generators/rails/app/app_generator.rb
Expand Up @@ -114,7 +114,7 @@ def config
template "cable.yml" unless options[:skip_action_cable]
template "puma.rb" unless options[:skip_puma]
template "spring.rb" if spring_install?
template "storage.yml"
template "storage.yml" unless skip_active_storage?

directory "environments"
directory "initializers"
Expand All @@ -139,7 +139,7 @@ def config_when_updating
template "config/cable.yml"
end

if !active_storage_config_exist
if !skip_active_storage? && !active_storage_config_exist
template "config/storage.yml"
end

Expand Down Expand Up @@ -355,6 +355,10 @@ def create_system_test_files
build(:system_test) if depends_on_system_test?
end

def create_storage_files
build(:storage) unless skip_active_storage?
end

def create_tmp_files
build(:tmp)
end
Expand Down Expand Up @@ -457,6 +461,7 @@ def finish_template

public_task :apply_rails_template, :run_bundle
public_task :run_webpack, :generate_spring_binstubs
public_task :run_active_storage

def run_after_bundle_callbacks
@after_bundle_callbacks.each(&:call)
Expand Down
3 changes: 2 additions & 1 deletion railties/lib/rails/generators/rails/app/templates/Gemfile
Expand Up @@ -20,9 +20,10 @@ ruby <%= "'#{RUBY_VERSION}'" -%>

# Use ActiveModel has_secure_password
# gem 'bcrypt', '~> 3.1.7'

<% unless skip_active_storage? -%>
# Use ActiveStorage variant
# gem 'mini_magick', '~> 4.8'
<% end -%>
# Use Capistrano for deployment
# gem 'capistrano-rails', group: :development
Expand Down
Expand Up @@ -12,7 +12,9 @@
//
<% unless options[:skip_javascript] -%>
//= require rails-ujs
<% unless skip_active_storage? -%>
//= require activestorage
<% end -%>
<% unless options[:skip_turbolinks] -%>
//= require turbolinks
<% end -%>
Expand Down
Expand Up @@ -8,10 +8,10 @@
require "active_model/railtie"
require "active_job/railtie"
<%= comment_if :skip_active_record %>require "active_record/railtie"
<%= comment_if :skip_active_storage %>require "active_storage/engine"
require "action_controller/railtie"
<%= comment_if :skip_action_mailer %>require "action_mailer/railtie"
require "action_view/railtie"
require "active_storage/engine"
<%= comment_if :skip_action_cable %>require "action_cable/engine"
<%= comment_if :skip_sprockets %>require "sprockets/railtie"
<%= comment_if :skip_test %>require "rails/test_unit/railtie"
Expand Down
Expand Up @@ -27,8 +27,10 @@ Rails.application.configure do
config.cache_store = :null_store
end

<%- unless skip_active_storage? -%>
# Store uploaded files on the local file system (see config/storage.yml for options)
config.active_storage.service = :local
<%- end -%>
<%- unless options.skip_action_mailer? -%>

# Don't care if the mailer can't send.
Expand Down
Expand Up @@ -44,9 +44,11 @@ Rails.application.configure do
# config.action_dispatch.x_sendfile_header = 'X-Sendfile' # for Apache
# config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for NGINX

<%- unless skip_active_storage? -%>
# Store uploaded files on the local file system (see config/storage.yml for options)
config.active_storage.service = :local

<%- end -%>
<%- unless options[:skip_action_cable] -%>
# Mount Action Cable outside main process or domain
# config.action_cable.mount_path = nil
Expand Down
Expand Up @@ -28,8 +28,11 @@ Rails.application.configure do
# Disable request forgery protection in test environment.
config.action_controller.allow_forgery_protection = false

<%- unless skip_active_storage? -%>
# Store uploaded files on the local file system in a temporary directory
config.active_storage.service = :test

<%- end -%>
<%- unless options.skip_action_mailer? -%>
config.action_mailer.perform_caching = false

Expand Down
2 changes: 2 additions & 0 deletions railties/lib/rails/generators/rails/app/templates/gitignore
Expand Up @@ -21,8 +21,10 @@
!/tmp/.keep
<% end -%>

<% unless skip_active_storage? -%>
# Ignore uploaded files in development
/storage/*
<% end -%>

<% unless options.skip_yarn? -%>
/node_modules
Expand Down
Expand Up @@ -87,7 +87,7 @@ def test
end

PASSTHROUGH_OPTIONS = [
:skip_active_record, :skip_action_mailer, :skip_javascript, :skip_action_cable, :skip_sprockets, :database,
:skip_active_record, :skip_active_storage, :skip_action_mailer, :skip_javascript, :skip_action_cable, :skip_sprockets, :database,
:javascript, :skip_yarn, :api, :quiet, :pretend, :skip
]

Expand Down

0 comments on commit 63f0c04

Please sign in to comment.