【问题标题】:Gravatar image not displaying头像不显示
【发布时间】:2016-07-06 11:32:35
【问题描述】:

我正在学习 Michael Hartl 的 Ruby on Rails 教程,并且添加了代码来显示用户的 Gravatar 图像。但它不显示。

这是我的用户助手

module UsersHelper
  # Returns the Gravatar (http://gravatar.com/) for the given user.
  def gravatar_for(user)
    gravatar_id = Digest::MD5::hexdigest(user.email.downcase)
    gravatar_url = "https://secure.gravatar.com/avatar/#{gravatar_id}"
    image_tag(gravatar_url, alt: user.name, class: "gravatar")
  end
end

这是我的 show.html.erb

<% provide(:title, @user.name) %>
<div class="row">
  <aside class="col-md-4">
    <section class="user_info">
      <h1>
        <%= gravatar_for @user %>
        <%= @user.name %>
      </h1>
    </section>
  </aside>
</div>

这是我检查元素时的代码

    <img alt="humber" class="gravatar" src="https://secure.gravatar.com/avatar/8e92292186fbb306e253b08d0f3eb993">
    humber

this is the image

【问题讨论】:

  • 代码看起来正确,所以您需要提供一些额外的信息?生成的&lt;img&gt; 标签是什么样的?当您直接访问您正在使用的 Gravatar 网址时会发生什么?
  • 我为用户使用的电子邮件是 example@railstutorial.org,它在教程中。当我在浏览器上检查元素时,我可以看到图像 src。
  • 嗯,我觉得不错。您是否对 .gravatar CSS 类有一些奇怪的样式可能会隐藏它?此外,这可能与您尝试从非 HTTPS 端点(例如 localhost:3000)请求 HTTPS 资源有关,因此请尝试将 gravatar_url 更改为 "http://gravatar.com/avatar/#{gravatar_id}"
  • 是的,我有一些奇怪的排毒。

标签: ruby-on-rails railstutorial.org cloud9-ide


【解决方案1】:

可能你在教程中做了一个练习并编写了自定义类来隐藏图像

img {
  display: none;
}

【讨论】:

  • 那是我的问题,感谢您的指点,我花了一个小时努力想办法解决这个问题。
  • 这对我也有用 - 对于遵循 Hartl 教程的人来说,这是最有可能的解决方法
【解决方案2】:

嗯....我尝试添加一个图像标签并将哈希添加到它以查看它是否呈现(请删除它并在它工作后使用 gravatar_for)。确实如此,所以这是我为改进 gravatar_for 方法所做的步骤。我希望它有所帮助。

  1. 将头像的来源从https://改为http://
  2. 在 gravatar_for 方法中为 gravatar 添加更多类。它应该读 image_tag(gravatar_url, alt: user.name, class: "gravatar img img-responsive")

【讨论】:

    【解决方案3】:

    我已经解决了!

    本教程指导您使用 curl 下载图像;但这可能会导致文件损坏。为什么?写这本书时,网站上的文件是“.png”,而今天是“.svg”。名称也从 rails.png 更改为 rails-logo.svg。

    按照指南,您可以下载一个空白文件并将其保存为 .png,然后 rails 会给您中指。

    【讨论】:

      【解决方案4】:

      您的代码是正确的,可能您使用的用户没有电子邮件,或者该电子邮件在 gravatar 中没有图像。我建议您验证用户是否有电子邮件

      def gravatar_for(user)
          if user.email?
              gravatar_id = Digest::MD5::hexdigest(user.email.downcase)
              gravatar_url = "https://secure.gravatar.com/avatar/#{gravatar_id}"
              image_tag(gravatar_url, alt: user.name, class: "gravatar")
          else
              image_tag("/img/avatar_default.png", alt: user.name, class: "gravatar")
          end
      end
      

      【讨论】:

      • 我使用了您的代码,但仍然没有显示。是否缺少与此相关的任何宝石?
      • 你确定你有 Gravatar 账号吗?尝试在用户中使用此电子邮件 humber.m23@gmail.com。
      • 我在问题中添加了一些细节。可以看看吗?
      • 好像一切正​​常,如果你把生成的html放在一个html文件中,它可以工作,然后尝试删除image_tag中的类。那么可能是css问题
      • 是的,我的 css 有问题,我将 img-display 设置为 none。谢谢
      【解决方案5】:

      电子邮件是否正确提取?我有一个方法可以做类似的事情,默认 url 作为参数(如果用户电子邮件没有在 gravatar 中注册。检查它是否可以帮助你:

        def avatar        
          default_url = "http://pcdoctorti.com.br/wp-content/plugins/all-in-one-seo-pack/images/default-user-image.png"
          gravatar_id = Digest::MD5::hexdigest(self.email).downcase
          "http://gravatar.com/avatar/#{gravatar_id}.png?d=#{CGI.escape(default_url)}"
        end
      

      Ps:这是User模型中的一个实例方法

      【讨论】:

        【解决方案6】:

        我遇到了同样的问题,并尝试了到目前为止给出的所有解决方案(好吧,无论如何都是前三个),但还是摸不着头脑。然后我从 URL 中删除了“安全”,如果工作正常 - 或者至少对于与 gravatar 无关的链接。我的意思是,我期待显示默认的 gravatar 图像,它确实出现了!

        (我也在关注 Michael Hartl 的课程。)

        <% hex_digest = Digest::MD5::hexdigest('my_name@gmail.com') %>
        <% gravatar_url = "https://gravatar.com/avatar/#{hex_digest}" %>
        <%= image_tag(gravatar_url, alt: 'gravatar image') %>
        

        【讨论】:

        • 在阅读上面的 cmets 时,我发现一个解释需要删除 URL 中的“安全”位的内容。 Bart Jedrocha 解释说,当您尝试从非安全(非 HTTPS)端点(如本地 Rails 服务器 localhost:3000)访问 gravatar 时,需要进行此更改。但是,当您将应用程序部署到安全端点时(比如 Heroku)您可能需要重新插入“安全”位。您可以使用 Rails.evn.production 动态执行此操作?检查。link
        【解决方案7】:

        我目前(2018 年 2 月)正在使用 Ruby on Rails 教程(Rails 5)一书的在线版本完成本课程。我发现错误是一个遗留代码:

        /sample_app/app/assets/stylesheets/custom.scss

        /* hide all images */
        img {
          display: none;
        }
        

        删除允许我正确显示 gravatar 图像

        【讨论】:

          【解决方案8】:

          As of 2018Michael 的辅助函数gravatar_for 的 URL 变量定义为:

          gravatar_url = "https://secure.gravatar.com/gravatar/#{gravatar_id}"

          但是Gravatar's documentation 指示您使用:

          gravatar_url = "https://www.gravatar.com/avatar/#{gravatar_id}"

          前者对我不起作用,我得到 (404) 并且图像出现损坏。后者对我来说效果很好。

          【讨论】:

            【解决方案9】:

            在您的 custom.scss 文件中注释掉或删除以下行:

            img {
                display: none;
            }
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-10-31
              • 2018-10-12
              • 1970-01-01
              • 1970-01-01
              • 2014-03-12
              相关资源
              最近更新 更多