mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
599f2cfb4a
This commit adds a rudimentary check for 'unbuilt' gems, so that we can abort the application load if there are any gems that have native components that have not yet been built. The rake task gems:build has now only builds 'unbuilt' gems as a result. The rake task gems:build:force has been added to deal with cases of incomplete builds, or any case where you need to force the build of all of your gems. Changes the gems:build task to get its gem list by parsing directory entries in vendor/gems, which sidesteps the chicken/egg issues involved with having a gem unpacked into vendor/gems without before its native bits are compiled. [#2266 state:committed] Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
79 lines
2 KiB
Ruby
79 lines
2 KiB
Ruby
desc "List the gems that this rails application depends on"
|
|
task :gems => 'gems:base' do
|
|
Rails.configuration.gems.each do |gem|
|
|
print_gem_status(gem)
|
|
end
|
|
puts
|
|
puts "I = Installed"
|
|
puts "F = Frozen"
|
|
puts "R = Framework (loaded before rails starts)"
|
|
end
|
|
|
|
namespace :gems do
|
|
task :base do
|
|
$gems_rake_task = true
|
|
require 'rubygems'
|
|
require 'rubygems/gem_runner'
|
|
Rake::Task[:environment].invoke
|
|
end
|
|
|
|
desc "Build any native extensions for unpacked gems"
|
|
task :build do
|
|
$gems_build_rake_task = true
|
|
frozen_gems.each &:build
|
|
end
|
|
|
|
namespace :build do
|
|
desc "Force the build of all gems"
|
|
task :force do
|
|
$gems_build_rake_task = true
|
|
Rake::Task['gems:unpack'].invoke
|
|
current_gems.each { |gem| gem.build(:force => true) }
|
|
end
|
|
end
|
|
|
|
desc "Installs all required gems."
|
|
task :install => :base do
|
|
current_gems.each &:install
|
|
end
|
|
|
|
desc "Unpacks all required gems into vendor/gems."
|
|
task :unpack => :install do
|
|
current_gems.each &:unpack
|
|
end
|
|
|
|
namespace :unpack do
|
|
desc "Unpacks all required gems and their dependencies into vendor/gems."
|
|
task :dependencies => :install do
|
|
current_gems.each { |gem| gem.unpack(:recursive => true) }
|
|
end
|
|
end
|
|
|
|
desc "Regenerate gem specifications in correct format."
|
|
task :refresh_specs => :base do
|
|
current_gems.each &:refresh
|
|
end
|
|
end
|
|
|
|
def current_gems
|
|
gems = Rails.configuration.gems
|
|
gems = gems.select { |gem| gem.name == ENV['GEM'] } unless ENV['GEM'].blank?
|
|
gems
|
|
end
|
|
|
|
def frozen_gems
|
|
Dir[File.join(RAILS_ROOT, 'vendor', 'gems', '*-*')].map do |gem_dir|
|
|
Rails::GemDependency.from_directory_name(gem_dir)
|
|
end
|
|
end
|
|
|
|
def print_gem_status(gem, indent=1)
|
|
code = case
|
|
when gem.framework_gem? then 'R'
|
|
when gem.frozen? then 'F'
|
|
when gem.installed? then 'I'
|
|
else ' '
|
|
end
|
|
puts " "*(indent-1)+" - [#{code}] #{gem.name} #{gem.requirement.to_s}"
|
|
gem.dependencies.each { |g| print_gem_status(g, indent+1) }
|
|
end
|