0

在 Heroku 上找不到我的 /app/assets 文件夹中Isotope ( http://isotope.metafizzy.co/ )使用的两个 Javascript 文件时遇到问题。在本地开发模式下,可以找到它们并且一切正常。但是一旦在 Heroku 上进入生产模式,这两个文件就不存在了。我在 Stack Overflow 上阅读了很多类似的帖子,并阅读了很多关于资产管道的内容,但我似乎仍然无法弄清楚是什么导致了问题。

这是我所知道的:

1) 在我的 /app/assets 文件夹中找到其他 Javascript 文件,包括 Bootstrap。

2) 如果我 rake assets:precompile -trace,我不会收到任何错误,而且一切看起来都很正常。

3) 在我的 production.rb 文件中,config.serve_static_assets = true。很多人似乎将其从 false 转换为 true 并解决了他们的问题,但在这一点上,我不确定应该是哪个。

4) 这个问题可能是由于有问题的同位素 Javascript 文件。在我的一个 html.erb 文件中,我根据开发人员的文档添加了一些与 Isotope 相关的 Javascript,如下所示:

 <script src="../assets/jquery-1.7.1.min.js"></script>
  <script src="../assets/jquery.isotope.min.js"></script>
  <script>
    $(function(){

      var $container = $('#eventcontainer');
      $container.imagesLoaded(function(){
        $container.isotope({
          layoutMode : 'spineAlign',
          spineAlign: {
              gutterWidth: 30
          },
          itemSelector : '.element',

      });
     });
 ....... more here that works in dev mode...
  </script>

我认为问题来自这两行:

<script src="../assets/jquery-1.7.1.min.js"></script>
<script src="../assets/jquery.isotope.min.js"></script>

因为如果我删除它们,我的应用程序即使在开发中运行也找不到 Javascript 文件。但是,它们包含在我的 application.js 文件中:

//= require jquery
//= require jquery_ujs
//= require bootstrap
//= require jquery-1.7.1.min
//= require jquery.isotope.min
//= require bootstrap-datepicker
//= require bootstrap-timepicker
//= require_tree .
//= require_self

所以我不确定为什么找不到它们或如何解决问题。我对 Rails 尤其是 Heroku 还很陌生,所以我非常感谢任何帮助。如果您需要更多信息或查看任何其他文件,请告诉我。

谢谢你的时间!

4

1 回答 1

1

我能够通过删除线条来解决这个问题

<script src="../assets/jquery-1.7.1.min.js"></script>
<script src="../assets/jquery.isotope.min.js"></script>

并使用此处找到的信息:Rails/Heroku precompiled assets not being found。具体来说,如下:

附注特别重要:“如果在您的应用程序中检测到 public/assets/manifest.yml,Heroku 将假定您正在自己处理资产编译,并且不会尝试编译您的资产。”

确保删除预编译创建的 public/assets/* 文件夹下的所有内容,包括 manifest.yml 文件。

通过执行 bundle exec rake assets:clean 删除 public/assets/* 中的所有内容后,我再次推送到 Heroku,允许它自己编译资产。那时它奏效了。我不完全确定原因,也许有人可以解释它,但在我看来,一旦删除这两行并重新编译所有资产,它就知道在正确的位置查找同位素 Javascript 文件。

于 2013-04-30T19:01:14.943 回答