我一直在努力使用youpy的“lastfm”gem从last.fm中提取动态数据。获取数据效果很好;但是,rails似乎不喜欢动态部分。现在,我已将代码添加到辅助文件夹中找到的名为“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对它进行了测试,似乎两者都做到了。我原以为这可能是缓存这个特定页面的问题所以我尝试了几个缓存黑客来使页面重新加载。这没有用。
然后我得出结论,将此代码粘贴在帮助文件中可能不是最佳解决方案。我不知道助手如何处理动态内容;比如这个。如果有人对此有任何见解,真棒!谢谢大家!
答案 0 :(得分: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
#...
请注意,这意味着您的两位助手不一定会使用相同的曲目列表。
您可能还想添加一些“仅在非常短时间内刷新曲目”逻辑。