You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails项目本地正常但Heroku上jQuery-ui失效求助

解决Heroku上jQuery UI Draggable失效的问题

我碰到过一模一样的情况,本地跑好好的,一上Heroku就报TypeError: $(...).draggable is not a function,给你几个排查和解决的方向,亲测有效:

1. 移除重复的UJS引入,修正加载顺序

看你的application.js里同时引入了jquery_ujs和rails-ujs——这俩在Rails 5+里是冲突的!rails-ujs是jquery_ujs的替代方案,同时加载会干扰jQuery和jQuery UI的初始化。直接删掉//= require jquery_ujs,保留//= require rails-ujs就行,修改后的application.js应该是:

//= require jquery
//= require rails-ujs
//= require jquery-ui
//= require turbolinks
//= require_tree .

2. 让Heroku自己处理资产预编译,别用本地预编译的文件

很多时候本地预编译的assets在生产环境会有兼容性问题,正确的做法是:

  • 先删掉本地生成的public/assets文件夹:rm -rf public/assets
  • 检查你的.gitignore文件,确保加上了/public/assets(如果还没加的话),避免把本地预编译的文件推到Git
  • 提交这些修改:git add . && git commit -m "Clean up local assets, rely on Heroku precompile"
  • 重新推送到Heroku:git push heroku master

3. 明确引入jQuery UI的具体组件(可选但稳妥)

有时候默认的//= require jquery-ui可能因为压缩或加载顺序问题漏了组件,你可以直接指定需要的draggable和droppable模块,替换掉原来的//= require jquery-ui:

//= require jquery-ui/draggable
//= require jquery-ui/droppable

这样能确保这两个组件被正确加载,不会遗漏。

4. 适配Turbolinks的事件触发时机

你的代码用了$(document).ready(),但Turbolinks会让页面不刷新就跳转,这个事件只会在第一次加载页面时触发,后续页面切换时代码不会执行,看起来就像是draggable没生效。把代码改成监听Turbolinks的加载事件:

<script>
$(document).on('turbolinks:load', function() {
  var callresultswal = function(){
    resultswal("Lückentext ausgefüllt!", "Du hast die Lücken korrekt ausgefüllt!", 500, "ethic", "utgf", "completed");
  };
  var points = 0;
  $( function() {
    $( ".draggable" ).draggable({
      revert: 'invalid',
      snap: ".dropfield",
      snapTolerance: 75,
      snapMode: "inner"
    });
    $( ".dropfield" ).droppable({
      drop: function( event, ui ) {
        if(ui.draggable.attr('id').toLowerCase() == $(this).attr('value')){
          points = points + 1;
          console.log(points);
          var id = ui.draggable.attr('id');
          $("#" + id).draggable( 'disable' );
          $("#" + id).css( "background-color", "#7FFF00");
          if (points == 6){
            callresultswal();
            $('#backforward').fadeIn("slow").removeClass("hidden-xl-down");
          }
        }
      }
    });
  } );
});
</script>

按这个顺序试下来,应该能解决问题。我当时是重复UJS和Turbolinks的问题一起存在,改完就好了。

内容的提问来源于stack exchange,提问作者Metaphysiker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:56:22