Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql heroku rails 3在生产中出现代码错误_Mysql_Ruby On Rails_Ruby_Postgresql_Heroku - Fatal编程技术网

Mysql heroku rails 3在生产中出现代码错误

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

我已将我的应用程序移动到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'

您正在使用另一个本地数据库,是吗?您的原始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适配器将Ruby
true
转换为
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适配器将Ruby
true
转换为
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)