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
Используя такой трюк у нас нет необходимости устанавливать на продакт сервере не нужные библиотеки.
