簡體   English   中英

Heroku Rails 3生產中的代碼錯誤

[英]heroku rails 3 code error in production

我已經將應用程序移至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'

在我的本地主機上的開發模式下,我沒有此類錯誤。 任何幫助,將不勝感激。

這是引用此錯誤的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

您說(在注釋中)您是在MySQL之上開發的。 MySQL對布爾使用整數列,其中1表示true,0表示false。 PostgreSQL有一個本機布爾類型,可以接受各種類型的真假信息,Rails在使用PostgreSQL時會使用't''f'

你有這個:

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

那就麻煩了 因此,我猜您file_avatar創建為整數列,並且一切都在開發中運行良好,因為Ruby true被MySQL適配器轉換為1 一切都落在Heroku上,因為PostgreSQL適配器將true轉換為't'而PostgreSQL不想將其與您的整數file_avatar列進行比較。

最好的選擇是通過遷移將file_avatar更改為布爾列:

change_column :uploads, :file_avatar, :boolean

然后,一旦解決了這一緊迫的問題,就將開發環境更改為PostgreSQL 8.3(如果要部署到共享的Heroku數據庫)或PostgreSQL 9.0(如果要部署到專用數據庫)。 在同一堆棧上進行開發和部署將使您免於遭受許多不必要的痛苦。

您正在使用其他本地數據庫,不是嗎? 您的原始SQL與Postgres配合不好。 您需要用postgres“ true”代替您的“ t”。

(file_avatar = 'true')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM