diff --git a/railties/CHANGELOG b/railties/CHANGELOG index 6abdbf834725950af5a4fbd72005f50638b1af0b..875bc527a658132df2a6ffb70b3536db53e29cc8 100644 --- a/railties/CHANGELOG +++ b/railties/CHANGELOG @@ -1,8 +1,12 @@ *SVN* -* Make Rails::VERSION implicitly loadable. Closes #4491. [Nicholas Seckar] +* Make Rails::VERSION implicitly loadable #4491. [Nicholas Seckar] -* Teach Rails apps to only load gems of the same Rails version they were generated with. [Nicholas Seckar] +* Fixed rake rails:freeze:gems #4518 [benji@silverinsanity.com] + +* Added -f/--freeze option to rails command for freezing the application to the Rails version it was generated with [DHH] + +* Added gem binding of apps generated through the rails command to the gems of they were generated with [Nicholas Seckar] * Added expiration settings for JavaScript, CSS, HTML, and images to default lighttpd.conf [DHH] diff --git a/railties/bin/rails b/railties/bin/rails index 5c03eed58f63f71f5ecfb942e146681049b535f6..d83f5b8b8e6d0dd83b9d49f645336bb6a81b691b 100755 --- a/railties/bin/rails +++ b/railties/bin/rails @@ -4,8 +4,13 @@ Signal.trap("INT") { puts; exit } require File.dirname(__FILE__) + '/../lib/rails/version' abort "Rails #{Rails::VERSION::STRING}" if %w(--version -v).include? ARGV.first +freeze = ARGV.any? { |option| %w(--freeze -f).include?(option) } +app_path = ARGV.first + require File.dirname(__FILE__) + '/../lib/rails_generator' require 'rails_generator/scripts/generate' Rails::Generator::Base.use_application_sources! Rails::Generator::Scripts::Generate.new.run(ARGV, :generator => 'app') + +Dir.chdir(app_path) { `rake rails:freeze:gems`; puts "froze" } if freeze \ No newline at end of file diff --git a/railties/environments/environment.rb b/railties/environments/environment.rb index 5fbceb69dc8d0a2f8cc13938ccacdfb1d6babe92..839da1c53d24521c58031dcb1e967c7fd688f28b 100644 --- a/railties/environments/environment.rb +++ b/railties/environments/environment.rb @@ -5,7 +5,7 @@ # ENV['RAILS_ENV'] ||= 'production' # Specifies gem version of Rails to use when vendor/rails is not present -RAILS_GEM_VERSION = '<%= Rails::VERSION::STRING %>' +<%= '# ' if freeze %>RAILS_GEM_VERSION = '<%= Rails::VERSION::STRING %>' # Bootstrap the Rails environment, frameworks, and default configuration require File.join(File.dirname(__FILE__), 'boot') diff --git a/railties/lib/rails_generator/generators/applications/app/app_generator.rb b/railties/lib/rails_generator/generators/applications/app/app_generator.rb index 145f354052935a1d2222b030a6fc3d1e60f876bd..b07133240b089840326ac050d7779a4e1f10d45c 100644 --- a/railties/lib/rails_generator/generators/applications/app/app_generator.rb +++ b/railties/lib/rails_generator/generators/applications/app/app_generator.rb @@ -6,7 +6,7 @@ class AppGenerator < Rails::Generator::Base DATABASES = %w( mysql oracle postgresql sqlite2 sqlite3 ) - default_options :db => "mysql", :shebang => DEFAULT_SHEBANG + default_options :db => "mysql", :shebang => DEFAULT_SHEBANG, :freeze => false mandatory_options :source => "#{File.dirname(__FILE__)}/../../../../.." def initialize(runtime_args, runtime_options = {}) @@ -44,7 +44,7 @@ def manifest # Environments m.file "environments/boot.rb", "config/boot.rb" - m.template "environments/environment.rb", "config/environment.rb" + m.template "environments/environment.rb", "config/environment.rb", :assigns => { :freeze => options[:freeze] } m.file "environments/production.rb", "config/environments/production.rb" m.file "environments/development.rb", "config/environments/development.rb" m.file "environments/test.rb", "config/environments/test.rb" @@ -100,6 +100,10 @@ def add_options!(opt) opt.on("-d", "--database=name", String, "Preconfigure for selected database (options: mysql/oracle/postgresql/sqlite2/sqlite3).", "Default: mysql") { |options[:db]| } + + opt.on("-f", "--freeze", + "Freeze Rails in vendor/rails from the gems generating the skeleton", + "Default: false") { |options[:freeze]| } end def mysql_socket_location diff --git a/railties/lib/tasks/framework.rake b/railties/lib/tasks/framework.rake index c837b73922cf673df3a47f1a374b09e7a69f638f..ff2bd78edbebc8a225b604e4bc5fde9e681b5112 100644 --- a/railties/lib/tasks/framework.rake +++ b/railties/lib/tasks/framework.rake @@ -6,7 +6,7 @@ namespace :rails do require 'rubygems' Gem.manage_gems - rails = version = ENV['VERSION'] ? + rails = (version = ENV['VERSION']) ? Gem.cache.search('rails', "= #{version}").first : Gem.cache.search('rails').sort_by { |g| g.version }.last