Rails tip: LoadError exception

9 февраля 2009, Понедельник

Разрабатывая приложения на Rails программисты используют разнообразные gem библиотеки. При переносе или деплое приложения эти библиотеки необходимо либо включать в приложение (фризить) либо ставить на сервере. Но что если тот или иной gem использовался только для тестирования и в рабочей продакт версии уже не нужен. В целом если у Вас vps и туева хуча места это не важно. Но если вы теснитесь на shared розделяя считаные метры под несколько проектов нужно что-то думать.

Итак, каким образом происходит включение тех или иных гемов? Чаще всего при помощи оператора require. А что просиходит когда require не находит нужного файла? Генерируется исключение LoadError. Таким образом, перехватывая это исключение мы можем продолжать работать.

Пример кода, в котором я использую populator + faker для создания тестовых данных:

begin
  require 'faker'
  require 'populator'

  require 'rake'
  require 'rake/testtask'
  require 'rake/rdoctask'
  require 'rake/rdoctask'

  require 'rubygems'

  require(File.join(File.dirname(__FILE__), '../../config/environment.rb'))

  namespace :db do

    desc "Populates a fake data to database"
    task( :populate ) do
      User.populate(10) do |user|
        user.login = Faker::Internet.user_name
        user.first_name = Faker::Name.first_name
        user.last_name = Faker::Name.last_name
        user.email = Faker::Internet.email
        user.admin = [true, false]
      end
    end
  end
rescue LoadError
end

Используя такой трюк у нас нет необходимости устанавливать на продакт сервере не нужные библиотеки.

Блог работает на WordPress.
Подписка RSS: все записи, комментарии.