герои рельсы 3 ошибки кода в производстве - PullRequest
1 голос
/ 16 ноября 2011

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

Это нормально запускает приложение, когда у меня нет записей в автомобилях

Когда я добавляю новую машину, я получаю эту ошибку в логе heroku

ActionView::Template::Error (PGError: ERROR:  invalid input syntax for integer: "t"
  SELECT  "uploads".* FROM "uploads" WHERE ("uploads".car_id = 1 AND (file_avatar = 't')) LIMIT 1):
     23:         <% if logged_in? && current_user.id == 1 -%>
     24:           <%= link_to "Select Main Photo", setmain_car_path(@car),  :remote => true, :class => 'setmain' %>
     25:         <% end %>
     26:         <% if @car.profile_avatar.nil? %>
     27:         <div id="no_picture"><%= image_tag('na.jpeg') %></div>
     28:         <% else %>
     29:         <li style="list-style:none;">
   app/views/cars/show.html.erb:26:in `_app_views_cars_show_html_erb___1259288943457494717_26795060_2985470889244562248'

в режиме разработкимой localhost у меня нет такой ошибки.Любая помощь будет оценена.

это код view.html, который ссылается на эту ошибку

<div class="latest_box">
    <div class="latest_bg"></div>
    <div class="last_added">Last added</div>
    <div class="latest_image">
      <% @cars.each do |car| %>
      <div class="latest_item">
        <% if car.profile_avatar.nil? %>
        <%= image_tag('rails.png') %>
        <% else %>
        <%=link_to image_tag(car.profile_avatar.photo.url(:thumb)), car %>
        <% end %><br />
        <b><%= link_to car.carname.name, car %></b>
        <b><%= link_to car.carmodel.name, car %></b><br />
        <%= car.category %><br />
        <%= number_to_currency(car.price) %>
      </div>
      <% end %>
    </div>

модель автомобиля

has_many :carname
  has_many :carmodel
  has_one :profile_avatar, :class_name => "Upload", :foreign_key => "car_id", :conditions => ['file_avatar = ?', true]
  has_many :uploads, :dependent => :destroy

Ответы [ 2 ]

3 голосов
/ 16 ноября 2011

Вы говорите (в комментарии), что разрабатываете поверх MySQL.MySQL использует целочисленные столбцы для логических значений с 1 для true и 0 для false.PostgreSQL имеет собственный логический тип, который принимает различные значения для true и false, Rails использует 't' и 'f' при работе с PostgreSQL.

У вас есть это:

:conditions => ['file_avatar = ?', true]

, и этовызывая твои проблемы.Итак, я предполагаю, что вы создали file_avatar как целочисленный столбец, и все отлично работало в разработке, потому что Ruby true конвертируется в 1 с помощью адаптера MySQL.В Heroku все рушится, потому что адаптер PostgreSQL конвертирует true в 't', а PostgreSQL не хочет сравнивать это с вашим целочисленным столбцом file_avatar.

Лучше всего изменить file_avatar налогический столбец с миграцией:

change_column :uploads, :file_avatar, :boolean

Затем, как только вы решите эту непосредственную проблему, измените среду разработки на PostgreSQL 8.3 (если вы развертываете в общую базу данных Heroku) или PostgreSQL 9.0 (если вы развертываете в выделенную базу данных).Разработка и развертывание в одном и том же стеке избавит вас от ненужной боли и страданий.

2 голосов
/ 16 ноября 2011

Вы используете другую локальную базу данных, не так ли?Ваш сырой SQL не очень хорошо работает с postgres.Вам нужно заменить postgres «true» на «t».

(file_avatar = 'true')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...