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:
parent
b165d73f2c
commit
5c99a4b93e
2 changed files with 26 additions and 11 deletions
|
@ -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/
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue