繁体   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