Почему Capistrano не проверяет последнюю версию моего кода из SVN?

Я использую Capistrano и Rails 2.3.4. Я уже сделал deploy:cold на удаленном сервере. Теперь в моем локальном ящике я изменил файл макета и передал его в репозиторий (я использую Netbeans 6 в качестве своей IDE). Я набираю cap deploy, и Capistrano выполняет свои команды и сообщает мне, что он проверил и развернул самую последнюю версию моего кода. Однако на сервере изменений нет, и когда я посмотрел файл макета, он использовал старую версию, а не ту, которую я только что зафиксировал и предположительно развернул.

Кто-нибудь испытывает это?

РЕДАКТИРОВАТЬ: Странно то, что я изменил некоторые файлы изображений, и эти были обновлены на сервере, но макет HTML, который я изменил, не был. Может проблема только в куках?

РЕДАКТИРОВАТЬ2: я проверил сам репозиторий (я использую ProjectLocker) и, конечно же, код там, измененный. Проблема только в том, что Capistrano НЕ проверяет это, хотя говорит, что это так, и не сообщает об ошибках.

Вот мой файл deploy.rb (конечно, очищенный):

# Application
set :application, "myapp"
set :deploy_to, "/var/www/html/#{application}"

# Settings
default_run_options[:pty] = true
set :use_sudo, true

# Servers
set :user, "deploy"
set :domain, "111.111.111.111"
set :runner, "deploy"
server domain, :app, :web
role :db, domain, :primary => true

# SVN
set :repository, "http://myhosting.com/svn/myapp/trunk"
set :scm_username, "[email protected]"
set :scm_password, "secret"
set :checkout, "export"

# Passenger
namespace :passenger do
  desc "Restart Application"
  task :restart do
    run "touch #{current_path}/tmp/restart.txt"
  end
end

after :deploy, "passenger:restart"

Иногда это работает, кажется. Например, я внес некоторые изменения в код ранее, и он проверил его нормально. У меня была проблема с тем, что он также не проверял мой файл database.yml; Я был вынужден редактировать его на сервере.


person Wayne Molina    schedule 04.10.2009    source источник
comment
Не могли бы вы прикрепить свой файл deploy.rb (обязательно удалите все IP-адреса и другие ссылки на ваши системы). Возможно, это поможет найти виновного.   -  person Ariejan    schedule 04.10.2009


Ответы (1)


Просто выстрел в темноте здесь, но вы действительно смотрели на файл макета или вы зашли на веб-сайт, а затем посмотрели на исходный код веб-страницы?

Если вы находитесь в продакшене, макет будет кэширован (config.action_controller.perform_caching = true), вам необходимо перезагрузить сервер. По умолчанию этого не происходит в режиме разработки, поскольку указанный выше параметр имеет значение false.

См. это для получения дополнительной информации.

person JRL    schedule 04.10.2009
comment
Я загрузил файл макета с помощью vi на сам сервер, и изменений там не было. Итак, всякий раз, когда я меняю файл, мне нужно перезагружать Apache? Хм... это нехорошо, так как у нас есть другие системы на основе PHP на том же сервере, которые обслуживаются в дополнение к приложению RoR, и перезагрузка Apache заставит их выйти из строя на несколько секунд. Нехорошо, если у нас есть люди, использующие его в то же время, когда мне нужно перезапустить Apache. - person Wayne Molina; 05.10.2009
comment
Ну, я говорил слишком рано. Кажется, это кеширование, потому что я сейчас загрузил страницу, и изменения есть. Странно, что сам файл не показал изменений. Тем не менее, это может вызвать у нас проблемы, если мне придется перезапустить весь сервер и рисковать перебоями в других приложениях. - person Wayne Molina; 05.10.2009
comment
Вы можете перезапустить свое приложение без перезапуска Apache, создав файл с именем tmp/restart.txt: $ touch tmp/restart - person JRL; 05.10.2009
comment
При проверке наличия изменений в файле файл уже был открыт? Файл в releases/old-timestamp/ на самом деле не изменится. В releases/new-timestamp/ появится новый файл, а символическая ссылка current будет обновлена, чтобы указывать на releases/new-timestamp. - person Emily; 13.10.2009