在Ruby on Rails 3.1+上公开静态文件?

时间:2012-12-16 01:26:39

标签: ruby-on-rails ruby ruby-on-rails-3.1

我想在我的Ruby on Rails应用程序中使用SoundManager2播放声音。它想要的一件事就是带有swfs的目录。我在哪里放,然后如何配置我的声音管理器?我想将它们放在目录/ soundmanager /中并使用JS,如下所示:

<script>
if (soundManager) {
  soundManager.setup({
    url: '/soundmanager/',
    onready: function() {
      var myGameMusic = soundManager.createSound({
        id: 'music1',
        url: 'music1.wav'
      });
      myGameMusic.play();
    },
    ontimeout: function() {
      console.log("Error in soundManager.setUp")
      // Hrmm, SM2 could not start. Missing SWF? Flash blocked? Show an error, etc.?
    }
  });
}
</script>

我在哪里放置swfs(/ soundmanager /)以及如何将其配置为公开?

一个相关的问题是:假设我有一些我希望可以下载的PDF。我在哪里放置它们以便它们可以下载?

我很困惑,因为有一个/ public目录,但显然它不再适用于rails 3.1。

2 个答案:

答案 0 :(得分:1)

您将它们放在app/assets/

关键是它们是从开发模式中提供的。

生产模式中,资产缩小并放入public/

这被称为“资产编译”,并在Rails 3.1中引入,并且已经引起了很多混乱,如您所见。

答案 1 :(得分:1)

Web服务器应该与Rails一起提供静态资源(而不是 Rails)。

我必须这样做才能在Apache / Passenger上使用Rails应用程序安装phpMyAdmin。

# Apache vhosts.conf
<Location ~ "/static_content"> 
  PassengerEnabled off 
</Location> 

这直接从Apache提供/static_content中的内容,完全绕过Rails。理想情况下,这是静态内容的最佳解决方案。