2012-03-15 2 views
3

Если вы используете рельсы со звездочками и шеф-поваром Opscode, как вы обрабатываете предварительную компиляцию ресурсов во время развертывания? Я хочу, чтобы моя история git была чистой, поэтому я не хочу, чтобы они предварительно скопировали их локально, а затем передали их в репозиторий.Шеф-повар с рельсами: обработка прекомпиляции активов во время развертывания

Самый простой способ состоит в том, чтобы добавить их в команду миграции cookie приложения, но это кажется мне неприятным. Предварительная компиляция активов должна быть отделена от миграции данных. Любые другие предложения о том, как справиться с этим?

ответ

4

Если вы используете ресурс deploy_revision, вы можете использовать задачу рейка, чтобы предварительно скомпилировать актив в блок before_restart.

Вот фрагмент кода, который находится в моем ресурсе deploy_revision. Поскольку я использую RVM, я установил удивительный RVM cookbook Fletcher Nichol. Вы можете заменить это ресурсом ruby-block.

Оформить заказ на более полный пример в my gist.

app = node[:rails][:app_name] 
before_restart do 
    rvm_shell "assets precompile" do 
    ruby_string "#{app[:ruby_ver]}@#{app[:gemset]}" 
    cwd release_path 
    user app[:deploy_user] 
    group app[:deploy_user] 

    # TODO I could not set the environment via the builtin command. Does not look like it is getting passed to popen4 
    # So instead of `environment "RAILS_ENV" => app[:environment]` I have it in the code block 
    code %{ 
     export RAILS_ENV=#{app[:environment]} 
     bundle exec rake assets:precompile 
    } 
    end 
end 
+0

Спасибо. Пошел с чем-то очень похожим в конце. Однако этот ответ подтолкнул меня в правильном направлении. – u2622