Mysql heroku rails 3在生产中出现代码错误
我已将我的应用程序移动到heroku,一切正常。当我没有汽车记录时,它会启动应用程序 当我在车上没有记录时,它会启动应用程序 当我添加一辆新车时,我在heroku日志中得到了这个错误Mysql heroku rails 3在生产中出现代码错误,mysql,ruby-on-rails,ruby,postgresql,heroku,Mysql,Ruby On Rails,Ruby,Postgresql,Heroku,我已将我的应用程序移动到heroku,一切正常。当我没有汽车记录时,它会启动应用程序 当我在车上没有记录时,它会启动应用程序 当我添加一辆新车时,我在heroku日志中得到了这个错误 ActionView::Template::Error (PGError: ERROR: invalid input syntax for integer: "t" SELECT "uploads".* FROM "uploads" WHERE ("uploads".car_id = 1 AND (file
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'
您正在使用另一个本地数据库,是吗?您的原始SQL与postgres的关系不太好。你需要用博士后的“真”来代替你的“t”
(file_avatar = 'true')
您正在使用另一个本地数据库,是吗?您的原始SQL与postgres的关系不太好。你需要用博士后的“真”来代替你的“t”
(file_avatar = 'true')
你(在评论中)说你是在MySQL之上开发的。MySQL使用整数列表示布尔值,1表示true,0表示false。PostgreSQL有一个本机布尔类型,它接受各种true和false,Rails在使用PostgreSQL时使用't'
和'f'
你有这个:
:conditions => ['file_avatar = ?', true]
这给你带来了麻烦。因此,我猜您创建了file\u avatar
作为一个整数列,并且在开发过程中一切正常,因为MySQL适配器将Rubytrue
转换为1
。Heroku上的一切都会崩溃,因为PostgreSQL适配器将true
转换为't'
,并且PostgreSQL不想将其与整数文件\u avatar
列进行比较
您最好的选择是通过迁移将文件\u avatar
更改为布尔列:
change_column :uploads, :file_avatar, :boolean
然后,一旦解决了眼前的问题,将开发环境更改为PostgreSQL 8.3(如果部署到共享Heroku数据库)或PostgreSQL 9.0(如果部署到专用数据库)。在同一个堆栈上开发和部署将使您免于许多不必要的痛苦和痛苦。您(在评论中)说您是在MySQL之上开发的。MySQL使用整数列表示布尔值,1表示true,0表示false。PostgreSQL有一个本机布尔类型,它接受各种true和false,Rails在使用PostgreSQL时使用't'
和'f'
你有这个:
:conditions => ['file_avatar = ?', true]
这给你带来了麻烦。因此,我猜您创建了file\u avatar
作为一个整数列,并且在开发过程中一切正常,因为MySQL适配器将Rubytrue
转换为1
。Heroku上的一切都会崩溃,因为PostgreSQL适配器将true
转换为't'
,并且PostgreSQL不想将其与整数文件\u avatar
列进行比较
您最好的选择是通过迁移将文件\u avatar
更改为布尔列:
change_column :uploads, :file_avatar, :boolean
然后,一旦解决了眼前的问题,将开发环境更改为PostgreSQL 8.3(如果部署到共享Heroku数据库)或PostgreSQL 9.0(如果部署到专用数据库)。在同一个堆栈上开发和部署将使您免受许多不必要的痛苦。不同的数据库是什么意思?我使用mysql数据库,Heroku使用Postgres。这两个数据库之间存在一些恼人的语法差异——每当您编写原始SQL而不是使用活动记录时,您都有部署不兼容代码的风险。将开发环境切换到Postgres将为您节省一些麻烦。我应该在哪里更改此设置??哦,嗯。当我看到错误信息时,我浏览了代码。你能发布更多关于车型的详细信息吗?你是如何处理你在Heroku上的上传的?在主要问题中添加了它-你指的是不同的数据库?我使用mysql数据库,Heroku使用Postgres。这两个数据库之间存在一些恼人的语法差异——每当您编写原始SQL而不是使用活动记录时,您都有部署不兼容代码的风险。将开发环境切换到Postgres将为您节省一些麻烦。我应该在哪里更改此设置??哦,嗯。当我看到错误信息时,我浏览了代码。你能发布更多关于车型的详细信息吗?你是如何处理你在Heroku上的上传的?在主要问题中添加了它。我知道我在使用mySQL时也遇到过同样的问题,我的解释/建议非常不完整。@RSG:但你确实发现并指出了根本的问题(“你使用的是另一个本地数据库,不是吗?”),这肯定比“WTF正在进行中”有所改进。我能再问你一件事吗。。我的车内控制器有一段代码@cars\u see\u special=Car.where(:special=>“yes”)。限制(3)将显示3辆具有特殊值“yes”(特价车)的车。在heroku,他们没有出现,我认为这与herpku使用postgres有关。我怎样才能修改这段代码才能得到需要的结果,我不想修改数据库。谢谢。@rmagnum2002:
Car.where(:special=>“yes”)。限制(3)
在这两种情况下应该是一样的,除了可能的情况处理差异。是:特殊的值'yes'
,'yes'
,'yes'
,还是…?@rmagnum2002:
应该这样做(假设您希望nil
与false
相同)。这是。我知道我在使用mySQL时也遇到过同样的问题,我的解释/建议非常不完整。@RSG:但你确实发现并指出了根本的问题(“你使用的是另一个本地数据库,不是吗?”),这肯定比“WTF正在进行中”有所改进。我能再问你一件事吗。。我的车内控制器有一段代码@cars\u see\u special=Car.where(:special=>“yes”)。限制(3)将显示3辆具有特殊值“yes”(特价车)的车。在heroku,他们没有出现,我认为这与herpku使用postgres有关。我怎样才能修改这段代码才能得到需要的结果,我不想修改数据库。谢谢。@rmagnum2002:Car.where(:special=>“yes”).limit(3)