class EY::Serverside::DependencyManager::Bundler
Constants
- DEFAULT_VERSION
- JOBS_NUMBER
Number of
Bundler
workers (–jobs)
Public Class Methods
default_version()
click to toggle source
# File lib/engineyard-serverside/dependency_manager/bundler.rb, line 12 def self.default_version DEFAULT_VERSION end
jobs_number()
click to toggle source
# File lib/engineyard-serverside/dependency_manager/bundler.rb, line 16 def self.jobs_number JOBS_NUMBER end
Public Instance Methods
check()
click to toggle source
# File lib/engineyard-serverside/dependency_manager/bundler.rb, line 28 def check if lockfile shell.status "Gemfile and Gemfile.lock found" if config.check_database_adapter? && !lockfile.any_database_adapter? shell.warning <<-WARN Gemfile.lock does not contain a recognized database adapter. A database-adapter gem such as pg, mysql2, mysql, or do_mysql was expected. This can prevent applications that use PostgreSQL or MySQL from booting. To fix, add any needed adapter to your Gemfile, bundle, commit, and redeploy. Applications not using PostgreSQL or MySQL can safely ignore this warning by adding ignore_database_adapter_warning: true to the application's ey.yml file under the defaults: top level key and committing the file to the repository. WARN end elsif ! config.ignore_gemfile_lock_warning shell.warning <<-WARN Gemfile found but Gemfile.lock is missing! You can get different versions of gems in production than what you tested with. You can get different versions of gems on every deployment even if your Gemfile hasn't changed. Deploying will take longer and some deploy options will be limited. To fix this problem, commit your Gemfile.lock to your repository and redeploy. WARN end end
detected?()
click to toggle source
# File lib/engineyard-serverside/dependency_manager/bundler.rb, line 20 def detected? gemfile? end
gemfile?()
click to toggle source
# File lib/engineyard-serverside/dependency_manager/bundler.rb, line 24 def gemfile? paths.gemfile.exist? end
install()
click to toggle source
# File lib/engineyard-serverside/dependency_manager/bundler.rb, line 56 def install shell.status "Bundling gems..." clean_bundle_on_system_version_change install_bundler_gem run "#{clean_environment} && cd #{paths.active_release} && #{bundle_install_command}" write_system_version end
rails_version()
click to toggle source
# File lib/engineyard-serverside/dependency_manager/bundler.rb, line 74 def rails_version lockfile && lockfile.rails_version end
show_ey_config_instructions()
click to toggle source
# File lib/engineyard-serverside/dependency_manager/bundler.rb, line 68 def show_ey_config_instructions if lockfile && !lockfile.has_ey_config? && !config.ignore_ey_config_warning shell.warning "Gemfile.lock does not contain ey_config. Add gem 'ey_config' to your Gemfile to access service configurations through EY::Config." end end
uses_sqlite3?()
click to toggle source
# File lib/engineyard-serverside/dependency_manager/bundler.rb, line 64 def uses_sqlite3? lockfile && lockfile.uses_sqlite3? end
Protected Instance Methods
bundle_install_command()
click to toggle source
# File lib/engineyard-serverside/dependency_manager/bundler.rb, line 123 def bundle_install_command "ruby -S bundle _#{bundler_version}_ install #{bundle_install_options.join(" ")}" end
bundle_install_options()
click to toggle source
# File lib/engineyard-serverside/dependency_manager/bundler.rb, line 107 def bundle_install_options options = [ "--gemfile", "#{paths.gemfile}", "--path", "#{paths.bundled_gems}", "--binstubs", "#{paths.binstubs}", ] # Install gems in parallel (Bundler.1.5+ only) # @see EYPP-58 options += ["--jobs", self.class.jobs_number] if check_version(bundler_version, ">= 1.5") options += ["--deployment"] if lockfile options += config.extra_bundle_install_options options end
bundler_version()
click to toggle source
# File lib/engineyard-serverside/dependency_manager/bundler.rb, line 141 def bundler_version @bundler_version ||= lockfile && lockfile.bundler_version || self.class.default_version end
check_version(version, requirement)
click to toggle source
Checks that given version is satisfies give requirement.
@param [String] version @param [String] requirement @return [true, false]
# File lib/engineyard-serverside/dependency_manager/bundler.rb, line 161 def check_version(version, requirement) Gem::Requirement.new( requirement ).satisfied_by? Gem::Version.new( version ) end
clean_bundle_on_system_version_change()
click to toggle source
# File lib/engineyard-serverside/dependency_manager/bundler.rb, line 127 def clean_bundle_on_system_version_change # diff exits with 0 for same and 1/2 for different/file not found. clean_bundle = "rm -Rf #{paths.bundled_gems}" if config.clean? shell.substatus "Clean bundle forced (--clean)" run clean_bundle else check_system = "#{config.system_version_command} | diff - #{paths.system_version} >/dev/null 2>&1" shell.substatus "Checking for system version changes" run "#{check_system} || #{clean_bundle}" end end
clean_environment()
click to toggle source
GIT_SSH needs to be defined in the environment for customers with private bundler repos in their Gemfile. It seems redundant to declare the env var again, but I’m hesitant to remove it right now.
# File lib/engineyard-serverside/dependency_manager/bundler.rb, line 103 def clean_environment %{export GIT_SSH="#{ENV['GIT_SSH']}" && export LANG="en_US.UTF-8" && unset RUBYOPT BUNDLE_PATH BUNDLE_FROZEN BUNDLE_WITHOUT BUNDLE_BIN BUNDLE_GEMFILE} end
install_bundler_gem()
click to toggle source
Install bundler in the system ruby
# File lib/engineyard-serverside/dependency_manager/bundler.rb, line 89 def install_bundler_gem egrep_escaped_version = bundler_version.gsub(/\./, '\.') # the grep "bundler " is so that gems like bundler08 don't get # their versions considered too # # the [,)] is to stop us from looking for e.g. 0.9.2, seeing # 0.9.22, and mistakenly thinking 0.9.2 is there has_gem_cmd = %{gem list bundler | grep "bundler " | egrep -q "#{egrep_escaped_version}[,)]"} install_cmd = %{gem install bundler -q -v "#{bundler_version}"} sudo "#{clean_environment} && #{has_gem_cmd} || #{install_cmd}" end
lockfile()
click to toggle source
# File lib/engineyard-serverside/dependency_manager/bundler.rb, line 145 def lockfile return @lockfile if defined? @lockfile lockfile_path = paths.gemfile_lock if lockfile_path.exist? @lockfile = Lockfile.new(lockfile_path.read, self.class.default_version) end end
write_system_version()
click to toggle source
# File lib/engineyard-serverside/dependency_manager/bundler.rb, line 80 def write_system_version store_ruby_version = "#{config.ruby_version_command} > #{paths.ruby_version}" store_system_version = "#{config.system_version_command} > #{paths.system_version}" run "mkdir -p #{paths.bundled_gems} && chown #{config.user}:#{config.group} #{paths.bundled_gems}" run "#{store_ruby_version} && #{store_system_version}" end