Проблема с запуском приложения RoR в рабочей среде

Имейте приложение, в котором есть «списки» — подумайте о рубричных объявлениях — и у каждого списка есть список тегов.

Следующий код дает сбой, когда я запускаю приложение в рабочем режиме, но отлично работает в режиме разработки

uninitialized constant ActiveRecord::Acts::Taggable::InstanceMethods::TagList
Extracted source (around line #45):

42:         
43:         <span class="listingIndexTags">
44:             Location: [location] | Tags:
45:             <% tag_list = listing.tag_list %>
46:             <% if tag_list != nil %> 
47:                 <% for tag in tag_list %>
48:                     <%= link_to tag.to_s, { :action => "filter_on",

Командная строка, которую я использую для запуска своего экземпляра mongrel в этом тестовом примере: ruby ​​script/server mongrel -e production

По умолчанию используется порт 3000. Я могу получить доступ к другим представлениям в приложении, которые НЕ вызывают "listing.tag_list".

«.tag_list» предоставляется «acts_as_taggable_on_steroids», который я использую в этом приложении. Он устанавливается как гем.

Может быть, мои файлы окружения шаткие?

Вот мой файл development.rb

config.cache_classes = false

config.whiny_nils = true

config.action_controller.consider_all_requests_local = true
config.action_view.debug_rjs                         = true
config.action_controller.perform_caching             = false

config.action_mailer.raise_delivery_errors = true

config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
  ...took these settings out for this post...
}

И мой файл production.rb...

config.cache_classes = true
config.threadsafe!  

config.action_controller.consider_all_requests_local = false
config.action_controller.perform_caching             = true

config.cache_store = :mem_cache_store

config.action_mailer.raise_delivery_errors = false

config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
  ...took these settings out for this post...
}

person jefflunt    schedule 12.03.2010    source источник
comment
Почти наверняка это связано с настройкой cache_classes. Чтобы сузить круг вопросов, что произойдет, если вы отключите кэширование классов в рабочей среде? Кроме того, какую версию Rails вы используете?   -  person Randy Simon    schedule 12.03.2010
comment
возможно, что ошибка появится на машине разработки, если вы удалите и перестроите базу данных. Я часто сталкиваюсь с подобными проблемами, и это потому, что база данных разработки содержит более старые записи, которые удовлетворяют определенные потребности приложения, но производственная база данных не содержит их, потому что она свежая. Иногда по мере роста приложения мы изменяем код таким образом, что оно не работает, когда база данных пуста... просто выстрел в темноте, если ничего не помогает.   -  person stephenmurdoch    schedule 23.03.2010
comment
также, какие тесты (в частности, интеграция) у вас есть? предложение выше не понадобилось бы, если бы ваши тесты были адекватными и проходили   -  person stephenmurdoch    schedule 23.03.2010
comment
@Randy: я пытался отключить кеширование классов и перезапустить Mongrel в рабочем режиме. Никаких изменений в симптомах.   -  person jefflunt    schedule 24.03.2010
comment
@Stephen: я фактически скопировал свою базу данных sqlite3 и вставил ее как production.sqlite3, поэтому в этом случае базы данных идентичны. Может быть, это тоже часть моей проблемы - прямое копирование баз данных может быть большим нет-нет? Отвечая на контрольный вопрос, вы абсолютно правы. У меня нет тестов, покрывающих это - на самом деле, Integration_tests.size == 0 в данный момент - настолько я плохой, плохой разработчик. Так что мне нужно написать их, и исправить это. Любые дополнительные комментарии по копированию базы данных, в качестве примечания?   -  person jefflunt    schedule 24.03.2010
comment
Написал свои функциональные тесты. Но нет никаких изменений. Он отлично работает и в моей тестовой среде - кажется, что он ломается только в производственной среде. Я буду продолжать ковыряться.   -  person jefflunt    schedule 27.03.2010


Ответы (3)


ФИКСИРОВАННЫЙ:

Что ж, отложив исправление этой ошибки до крайней необходимости (сегодня), я наконец нашел источник проблемы.

Включение строки: config.threadsafe!

В моем файле "production.rb" это было причиной.

I finally found it by:
    1. Making my production and development environment files identical
    2. Line-by-line, changing the production environment file until it either:
      a. The app broke in production mode
      b. I was back to my original production file

Во всяком случае, когда я дошел до добавления "config.threadsafe!" линия - ОНА СЛОМАЛАСЬ! Я никогда не был так счастлив, что у меня был перерыв в приложении.

Итак, немного чтения, чтобы понять, что именно делает эта опция в сочетании с Mongrel (если Mongrel вообще имеет значение), и я получу свой ответ.

person jefflunt    schedule 28.03.2010
comment
Прекрасная работа. У меня была такая же проблема здесь. Проклятый параметр threadsafe! из старого развертывания JRuby, которое мы пробовали. - person Fábio Batista; 09.09.2011

Пришел сюда с той же проблемой и просто хотел передать записку всем, кто испытывает то же самое .... Мне удалось решить эту проблему, исправив версию драгоценных камней в environment.rb

изменил этот
config.gem "действует как тегируемый-на", :source => "http://gemcutter.org "

на это:
config.gem "действует как тегируемый-на", :source => "
http://gemcutter.org", :version => '2.0.0.rc1'

и запускаем грабли gems:install

Интересно, запускали ли вы каким-то образом разные драгоценные камни в разных средах, если это возможно.

person flunder    schedule 14.06.2010

У вас установлен гем acts_as_taggable_on_steroids на рабочем сервере?

person John Topley    schedule 12.03.2010
comment
Я делаю. То же самое происходит на моей машине для разработки, как оказалось, когда я запускаю mongrel в производственной среде, так что ничего особенного для сервера, как оказалось. У меня также есть строка «config.gem act_as_taggable_on_steroids» в моем файле environment.rb, поэтому я ожидаю, что она будет применяться ко всем средам, если я правильно это понимаю. - person jefflunt; 14.03.2010
comment
Итак, указан ли драгоценный камень, если вы запустите gem list на сервере? - person John Topley; 15.03.2010