0

我绝不是 Ruby 开发人员,但我在本地主机上为 ruby​​ 框架编写了 HAML。

我最初放置了一个名为 vidgirlBox2.flv 的文件并在 HAML 中调用它,但将文件转换为名为 vidGirl_home.swf 的 swf。

这个瑞士法郎有效。

直到我对原始 .fla 进行了简单的更改,并覆盖了 vidGirl_home.swf 。

它再也没有工作过。

我尝试了 swfObject,Unobtrusive Flash Object,最低限度的嵌入 swf,一切。

事实证明,在运行本地服务器时,我在终端中收到此消息:

ActionController::RoutingError (No route matches "/Users/daniellevine/Desktop/vidgirlBox2.flv" with {:method=>:get}):


Rendering rescues/layout (not_found)

如您所知,它正在寻找一个旧文件。我没有在我的任何 haml 中调用此文件。我对这个 flv 如何将自己写入红宝石感到困惑(至少这是我假设的)。

这是我尝试解决的方法,但似乎此代码会生成 rails 编译器错误。这可能只是一个简单的命名约定错误。我在某处缺少引号吗?

我的新嵌入代码:

      - if Rails.env.development?
      = javascript_include_tag "swfobject"
      - else
      %script{:src => "http://ajax.googleapis.com/ajax/libs/swfobject/2.1/swfobject.js"}
      - id ||= "flash"
      - filename ||= "/images/vidGirl/vidGirl_home.swf"
      - width ||= 440
      - height ||= 247
      - background ||= "#ffffff"
      - version ||= 9
      - base ||= '{base: "."}'

      %div{ :id => id }
        %strong You need to upgrade your Flash Player

      = javascript_tag "swfobject.embedSWF('/images/vidGirl/vidGirl_home.swf', 'vidGirl_home', '440', '247', '9.0.0', '/javascripts/swfobject/expressInstall.swf', {}, '/public/', {});"

有谁知道可能发生了什么?或者更好的是,如何解决这个问题?

谢谢!!

4

3 回答 3

1

我不是超级精通 Flash,但看起来当您将文件转换为 swf 时,它基本上将您之前的 vidgirlBox2.flv 文件嵌入为资源。我的猜测是该资源曾经存在于您的桌面上,因此当您编辑 fla 文件时,本地路径以某种方式保存到资源中。然后,您看到的错误将是由于从 flash 文件本身中调用的错误资源路径,而不是从您在 haml 标记中进行的调用,这看起来很好。

于 2009-06-11T07:35:42.967 回答
0

看起来您正在使用的嵌入代码正试图通过本地路径(即您计算机上的路径)访问该文件。

我不确定这是否是 Rails 应用程序(或其他 Ruby 框架),但您需要使 .flv/.swf 文件与其他静态文件位于同一位置。

对于 Rails 应用程序,这将位于 public/ 文件夹中。我做了一些 Rails+Flash 应用程序,我通常将文件放在 public/flash/ 目录中。

另一种选择是将 .swf/.flv 文件放在 S3 帐户上,并通过直接 S3 URL 访问它。这对于较大的视频文件非常有用,因为它可以节省带宽。

于 2009-06-10T22:22:48.037 回答
0

上次我遇到这个问题时,一个 flash 电影试图加载另一个 flash 电影,但基本路径是错误的。所以 austinfromboston 可能是对的,通过将 flv 转换为 swf,它将您的 .flv 嵌入到 swf 中。

如何解决这个问题?确保 .swf 中的路径是相对的而不是绝对的。然后,您需要设置 BASE 参数。以下是 swobject 和 HAML 的示例:

- if Rails.env.development?
= javascript_include_tag "swfobject"
- else
%script{:src => "http://ajax.googleapis.com/ajax/libs/swfobject/2.1/swfobject.js"}
- id ||= "flash"
- filename ||= "/swf/flashmovie.swf"
- width ||= 990
- height ||= 500
- background ||= "#ffffff"
- version ||= 9
- base ||= '{base: "."}'

%div{ :id => id }
  %strong You need to upgrade your Flash Player

= javascript_tag "swfobject.embedSWF('#{filename}', '#{id}', '#{width}', '#{height}', '#{version}', '/swf/express_Install.swf', {}, #{base}, {});"

路径 /swf/flashmovie.swf 表示公用文件夹中有一个文件夹 swf。

于 2009-06-11T11:12:58.770 回答