什么可能导致铁路中本地/开发和生产路由之间的差异?

时间:2015-02-12 10:40:31

标签: javascript ruby-on-rails ajax ruby-on-rails-4 heroku

我本地环境中的所有内容都可以正常工作,但是在heroku上的生产中,ajax链接会在虚荣网址上呈现内容。 /t/tags代替/atags/1呈现有关缺少ID的错误:

ActionView::Template::Error (No route matches {:action=>"show", :controller=>"atags", :id=>nil} missing required keys: [:id]):

这更没意义,因为如果我导航到' / t / tags'例如,页面加载正常。因此,路线上的ajax被破坏,而通过常规渲染视图的相同路线是有效的。

在开发和生产环境之间可能导致此错误和差异的原因是什么?

我检查了heroku和本地的路线,它们是相同的。

呈现视图的js是:$("#tag_posts").html("<%= escape_javascript(render @atag) %>");所以我想知道它是否与@atags路径在生产中由于某种原因而被不同地解释有什么关系?

破坏的链接正在构建:

link_to(piece.downcase, atag_path(Atag.find_by(tag:piece[1..-1].downcase)), 
:class => 'post_hashtag', :remote => true, :onclick => "location.href='#top'")

由相同代码构造的这些链接在生产中正常工作,在渲染常规页面时减去remote:true:onclick => "location.href='#top'"

    link_to(piece.downcase, atag_path(Atag.find_by(tag:piece[1..-1].downcase)),
              :class => 'post_hashtag')

再次注意,这两种类型的链接在开发中都可以正常工作,只有后者在生产中才能正常工作。任何洞察这种奇怪的事情都会非常感激!

谢谢!

编辑:我想我几乎把它缩小了。在show我定义的atags控制器中:

@atag = Atag.find_by_tag(params[:id])

我在哪里/如何为其他视图制定等效定义?这可能会解决生产中的问题。谢谢!

1 个答案:

答案 0 :(得分:0)

在手边的方法中piece[1..-1]是标记,路线的基础是/t/,因此将atag_path(Atag.find_by(tag:piece[1..-1].downcase))更改为"/t/" + piece[1..-1]解决了问题,因为它直接通过了路由作为字符串。此外,它比返回数据库找到路线要快得多。

我不确定/好奇为什么它在当地很好但不在生产中。