SQL не запускается в производственной среде под Phusion Passenger - PullRequest
1 голос
/ 10 июля 2011

У меня есть код, подобный следующему:

class TheClass < ActiveRecord::Base
  connection.execute "set language 'us_english'"
  // the rest of the code
end

Команда execute не выполняется в рабочей среде под Passenger!С Mongrel все в порядке, размещение кода внутри более поздней вызванной функции работает, настройки разработки Passenger + также работают.

Есть ли что-то другое в способе работы Passenger с соединением или экземпляром Class, который я не знаю?

Редактировать:

Понятно, что именно так Пассажир устанавливает соединения.Таким образом, вопрос сводится к следующему: «Существует ли поддерживаемый способ выполнения оператора SQL при установлении соединения?»

Ответы [ 2 ]

1 голос
/ 10 июля 2011

Моя психическая отладка говорит, что тебя укусила модель разветвления Пассажира.

По сути, Passenger разветвляет кучу рабочих процессов из основного процесса, в который уже загружена ваша среда rails.Это сокращает время, необходимое рабочим для инициализации, поскольку все ваши модели, контроллеры и другие классы уже существуют.

Теперь из документации Passenger:

Обратите внимание, что Phusion Passenger автоматически восстанавливает соединение с базой данных при создании нового рабочего процесса, поэтому обычно вы не сталкиваетесь с базой данных.проблемы при использовании интеллектуального режима порождения.

Ваш оператор connection.execute выполняется при загрузке TheClass.На самом деле это происходит только один раз, в родительском процессе, который разветвляет всех рабочих.Каждый из сотрудников устанавливает свои собственные соединения, но никогда не запускает ваш запрос «set language», так как TheClass уже загружен.Он работает в режиме разработки, потому что каждый раз перезагружает ваши классы.

Там может быть какая-то настройка, которую вы можете выполнить в application.rb, чтобы сообщить ActiveRecord свой язык соединения, в противном случае вам, вероятно, придется сделать уродливый хак, выполнив этот запрос в before_filter или что-то в этом роде.

0 голосов
/ 10 июля 2011

проверьте журналы ошибок вашего пассажира, они могут отличаться от стандартных журналов рельсов.

...