У меня есть приложение Rails 2, в разработке все работает отлично, но в производстве одно из моих представлений сломано, и мне трудно найти причину.Rails Debugging
Единственная разница между разработкой и производством заключается в том, что по какой-то причине разработка использует жемчужину mysql2
, а в производстве используется оригинальный драгоценный камень mysql
.
Во-первых, если I хвоста журнала, ошибка я получаю:
ActionView::TemplateError (undefined method 'map' for #<Mysql::Result:0xb5ce7844>) on line #15 of app/views/logical_interface/create.rhtml:
Линия 15 является
<%= select_tag 'logical_interface[vlan_id]', options_for_select(@vlan_numbers.map(&:reverse)) %>
который определен в контроллере, как
@pop_id = session[:pop_id]
@vlan_numbers = ActiveRecord::Base.connection.execute("SELECT pop_vlans.id, vlan_number FROM pop_vlans WHERE (pop_id = '" + @pop_id.to_s + "' AND vlan_number = 'Untagged') OR pop_vlans.id NOT IN (SELECT logical_interfaces.vlan_id FROM logical_interfaces) AND pop_id = " + @pop_id.to_s)
Я проверил @pop_id
, чтобы узнать, не получилось ли оно использовать его было ноль и т. д., но распечатка его показывает правильное значение.
Если удалить строку 15 и добавьте <%= @vlan_numbers.inspect %>
все, что я получаю #
и если я debug @vlan_numbers
#<Mysql::Result:0xb5db1298>
я получаю, так что я действительно тупик.
Я посмотрел, есть ли что-нибудь в mysql2
, которого не было в mysql
, но все, что я мог найти, это то, что mysql2
в целом лучше.
Любые идеи?
Update
@vlan_numbers = ActiveRecord::Base.connection.select_all("SELECT pop_vlans.id, vlan_number FROM pop_vlans WHERE (pop_id = '" + @pop_id.to_s + "' AND vlan_number = 'Untagged') OR pop_vlans.id NOT IN (SELECT logical_interfaces.vlan_id FROM logical_interfaces) AND pop_id = " + @pop_id.to_s).collect { |r| r['vlan_number'] }
Я попытался с помощью выше, как предложил мой mbratch (ответ теперь был удален), но это немного своеобразный, потому что Untagged
вариант, который добавляется к списку уже это текст почитали так что это deggatnU
. Я думаю, что то же самое происходит с значениями выбора (которые выглядят так, как будто они представляют собой текст вместо фактического id
из таблицы).
Я немного озадачен вашим утверждением, что * по какой-то причине разработка использует камень mysql2 *. Вы должны контролировать, какой жемчуг использует ваша среда разработки, чтобы сделать его более похожим на вашу производственную среду. Ваш 'config/environment.rb' говорит что-нибудь о' mysql' gem? – lurker
ничего в 'config/environment.rb'.Я имею в виду, что я ожидал бы, что оба драгоценных камня будут одинаковыми, а также для производства использовать 'mysql2', поскольку он« лучше ». – martincarlin87
При переходе на производство вы можете или не иметь контроль над тем, что находится на этом сервере (если для Например, вы идете вживую на героку). Поэтому иногда вам приходится соответствовать разработке и производству. Но если вы управляете обоими, тогда вы можете установить свой 'config/environment.rb' в соответствии с выбором правильного драгоценного камня. – lurker