1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

AppGenerator: allow both 'rake' and 'rails'

This commit comes from the comments made by @matthewd at https://github.com/rails/rails/pull/23795/files#r54469637
and by @rafaelfranca at https://github.com/rails/rails/pull/23795/files#r54609364

The idea is that if you type (for example) "rake db:migrate" in an AppGenerator,
then this should actually invoke `rake db:migrate` on the command line, whereas
if you type "rails_command db:migrate", this should invoke `rails db:migrate`.
This commit is contained in:
claudiob 2016-03-09 07:29:17 -08:00
parent b165d73f2c
commit 5c99a4b93e
2 changed files with 26 additions and 11 deletions

View file

@ -207,18 +207,23 @@ module Rails
in_root { run_ruby_script("bin/rails generate #{what} #{argument}", verbose: false) }
end
# Runs the supplied rake task
# Runs the supplied rake task (invoked with 'rake ...')
#
# rake("db:migrate")
# rake("db:migrate", env: "production")
# rake("gems:install", sudo: true)
def rake(command, options={})
log :rake, command
env = options[:env] || ENV["RAILS_ENV"] || 'development'
sudo = options[:sudo] && RbConfig::CONFIG['host_os'] !~ /mswin|mingw/ ? 'sudo ' : ''
in_root { run("#{sudo}#{extify(:rails)} #{command} RAILS_ENV=#{env}", verbose: false) }
execute_command :rake, command, options
end
# Runs the supplied rake task (invoked with 'rails ...')
#
# rails("db:migrate")
# rails("db:migrate", env: "production")
# rails("gems:install", sudo: true)
def rails_command(command, options={})
execute_command :rails, command, options
end
alias :rails_command :rake
# Just run the capify command in root
#
@ -271,6 +276,16 @@ module Rails
end
end
# Runs the supplied command using either "rake ..." or "rails ..."
# based on the executor parameter provided.
def execute_command(executor, command, options={})
log executor, command
env = options[:env] || ENV["RAILS_ENV"] || 'development'
sudo = options[:sudo] && RbConfig::CONFIG['host_os'] !~ /mswin|mingw/ ? 'sudo ' : ''
in_root { run("#{sudo}#{extify(executor)} #{command} RAILS_ENV=#{env}", verbose: false) }
end
# Add an extension to the given name based on the platform.
def extify(name)
if RbConfig::CONFIG['host_os'] =~ /mswin|mingw/

View file

@ -202,7 +202,7 @@ class ActionsTest < Rails::Generators::TestCase
end
def test_rails_should_run_rake_command_with_default_env
assert_called_with(generator, :run, ["rails log:clear RAILS_ENV=development", verbose: false]) do
assert_called_with(generator, :run, ["rake log:clear RAILS_ENV=development", verbose: false]) do
with_rails_env nil do
action :rake, 'log:clear'
end
@ -210,13 +210,13 @@ class ActionsTest < Rails::Generators::TestCase
end
def test_rails_with_env_option_should_run_rake_command_in_env
assert_called_with(generator, :run, ['rails log:clear RAILS_ENV=production', verbose: false]) do
assert_called_with(generator, :run, ['rake log:clear RAILS_ENV=production', verbose: false]) do
action :rake, 'log:clear', env: 'production'
end
end
test "rails command with RAILS_ENV variable should run rake command in env" do
assert_called_with(generator, :run, ['rails log:clear RAILS_ENV=production', verbose: false]) do
assert_called_with(generator, :run, ['rake log:clear RAILS_ENV=production', verbose: false]) do
with_rails_env "production" do
action :rake, 'log:clear'
end
@ -224,7 +224,7 @@ class ActionsTest < Rails::Generators::TestCase
end
test "env option should win over RAILS_ENV variable when running rake" do
assert_called_with(generator, :run, ['rails log:clear RAILS_ENV=production', verbose: false]) do
assert_called_with(generator, :run, ['rake log:clear RAILS_ENV=production', verbose: false]) do
with_rails_env "staging" do
action :rake, 'log:clear', env: 'production'
end
@ -232,7 +232,7 @@ class ActionsTest < Rails::Generators::TestCase
end
test "rails command with sudo option should run rake command with sudo" do
assert_called_with(generator, :run, ["sudo rails log:clear RAILS_ENV=development", verbose: false]) do
assert_called_with(generator, :run, ["sudo rake log:clear RAILS_ENV=development", verbose: false]) do
with_rails_env nil do
action :rake, 'log:clear', sudo: true
end