1

我一直在努力使用 youpy 的“lastfm”gem 从 last.fm 中提取动态数据。获取数据效果很好;但是,rails 似乎不喜欢动态部分。现在,我已将代码添加到 helper 文件夹中名为“HomeHelper”(在创建 rails 应用程序期间生成)的帮助程序模块中:

module HomeHelper

@@lastfm = Lastfm.new(key, secret)
@@wesRecent = @@lastfm.user.get_recent_tracks(:user => 'weskey5644')    

def _album_art_helper

    trackHash = @@wesRecent[0]
    medAlbumArt = trackHash["image"][3]

    if medAlbumArt["content"] == nil
        html = "<img src=\"/images/noArt.png\"  height=\"auto\" width=\"150\" />"
    else
        html = "<img src=#{medAlbumArt["content"]} height=\"auto\" width=\"150\" />"
    end

    html.html_safe

end

def _recent_tracks_helper

    lfartist1 = @@wesRecent[0]["artist"]["content"]
    lftrack1 = @@wesRecent[0]["name"]
    lfartist1 = @@wesRecent[1]["artist"]["content"]
    lftrack1 = @@wesRecent[1]["name"]

    htmltrack = "<div class=\"lastfm_recent_tracks\">
                <div class=\"lastfm_artist\"><p>#{lfartist1 = @@wesRecent[0]["artist"]["content"]}</p></div>
                <div class=\"lastfm_trackname\"><p>#{lftrack1 = @@wesRecent[0]["name"]}</p></div>
                <div class=\"lastfm_artist\"><p>#{lfartist2 = @@wesRecent[1]["artist"]["content"]}</p></div>
                <div class=\"lastfm_trackname\"><p>#{lftrack2 = @@wesRecent[1]["name"]}</p></div>
            </div>
    "       

    htmltrack.html_safe
end
end

我为每个创建了一个部分并将它们添加到我的索引页面:

<div class="album_art"><%= render "album_art" %></div>
<div id="nowplayingcontain"><%= render "recent_tracks" %></div>

太好了,这得到了我需要的数据并像我想要的那样显示在页面上;但是,根据last.fm,似乎当歌曲更改时,除非我重新启动服务器,否则它不会出现在我的网站上。

我已经使用 Phusion Gassenger 和 WEBrick 对此进行了测试,似乎两者都可以。我曾认为这可能是这个特定页面的缓存问题,所以我尝试了一些缓存黑客来使页面过期并重新加载。这没有帮助。

然后我得出结论,将此代码粘贴在帮助文件中可能不是最佳解决方案。我不知道助手处理动态内容的能力如何;像这样。如果有人对此有任何见解,太棒了!谢谢大家!

4

1 回答 1

1

您的问题不在于您正在使用帮助程序,而在于您正在使用类变量:

module HomeHelper
    @@lastfm = Lastfm.new(key, secret)
    @@wesRecent = @@lastfm.user.get_recent_tracks(:user => 'weskey5644')

在第一次读取模块时初始化。特别是,@@wesRecent将被初始化一次,然后它将保持不变,直到您重新启动服务器或碰巧获得新的服务器进程。您应该可以get_recent_tracks在需要时拨打电话:

def _album_art_helper
    trackHash = @@lastfm.user.get_recent_tracks(:user => 'weskey5644').first
    #...

请注意,这意味着您的两个助手不一定会使用相同的曲目列表。

您可能还想添加一些“每分钟最多只刷新一次曲目”的逻辑。

于 2012-07-15T03:38:17.163 回答