【问题标题】:undefined method `cookie_value' for .... Impressionist gem未定义的方法 `cookie_value' for .... 印象派宝石
【发布时间】:2021-03-06 05:24:36
【问题描述】:

我在我的 Film 模型中设置了 impressionist gem。它一直运行良好,正在更新展示次数,但在尝试获取 Films#Show 页面时突然收到以下错误。

“60cb104e4befe185a8b81aac9a2c5e3c”的未定义方法“cookie_value”:字符串

好像和session_hash有关,但不知道怎么解决。

有人有什么想法吗?

这是我的电影模型:

    class Film < ApplicationRecord


  acts_as_votable
  is_impressionable

  mount_uploader :cover, ImageUploader
  mount_uploader :video, VideoUploader
  mount_uploader :trailer, VideoUploader



   def score
    self.get_upvotes.size - self.get_downvotes.size
  end

  extend FriendlyId
  friendly_id :title, use: :slugged

  # one film has many reviews
  has_many :reviews, dependent: :destroy

  validates :title, presence: true
  validates :author, presence: true
  validates :cover, presence: true
  validates :description, presence: true

end

电影放映页面

<%= render "shared/ticker" %>




<div class="back-to-films">
  <%= link_to films_path do %>
  <span><%= image_tag "BackArrow1.svg" %> </span><h3 class="back-to-gallery">Back to film gallery</h3>
  <% end %>
</div>



<section class="film-show-grid">

    <div class="film-show-img" onclick="toggle();">
  <%= image_tag @film.cover.show.url %>
  </div>

  <div class="film-show-info">
    <span><% if @film.is_top_pick %>
     <%= image_tag "is_featured.svg", :class => "top-pick-show" %>
   <% end %></span>

  <span class="liking-target">
       <%= link_to like_film_path(@film), class: "upvoted {liked_or_not}", method: :put, remote: :true do %>
       <%= image_tag "Polygon2.svg", :class => "polygon" %>
        <% end %>
        <span class="like_count">
          <%= @film.get_likes.size %>
        </span>
  </span>

    <span class="views">
    <%= image_tag "view.svg", :class => "eyeball" %>
    <span class="impressions"><%= @film.impressionist_count(:filter=>:ip_address) %></span>
    </span>




    <div class="">
      <h2 class="film-title"><%= @film.title %></h2>
      <h6 class="film-author"><%= @film.author %></h6> <span><%= @film.description %></span>
      <p class="film-description"><%= @film.description_body %></p>
    </div>
    <div class="play-button" onclick="toggle();">
      <span> Play </span> <%= image_tag "play.svg", :class => "play-symbol" %>
    </div>
    <div class="preview-button" onclick="toggleTrailer();">
      Trailer
    </div>
    <%= link_to film_reviews_path(@film) do %>
    <div class="cafe-talk-button">
      Café talk
    </div>
    <% end %>

还有我的完整堆栈跟踪

impressionist (2.0.0) app/controllers/impressionist_controller.rb:143:in `session_hash'
impressionist (2.0.0) app/controllers/impressionist_controller.rb:60:in `associative_create_statement'
impressionist (2.0.0) app/controllers/impressionist_controller.rb:27:in `impressionist'
app/controllers/films_controller.rb:28:in `show'
actionpack (6.0.3.2) lib/action_controller/metal/basic_implicit_render.rb:6:in `send_action'
actionpack (6.0.3.2) lib/abstract_controller/base.rb:195:in `process_action'
actionpack (6.0.3.2) lib/action_controller/metal/rendering.rb:30:in `process_action'
actionpack (6.0.3.2) lib/abstract_controller/callbacks.rb:42:in `block in process_action'
activesupport (6.0.3.2) lib/active_support/callbacks.rb:135:in `run_callbacks'
actionpack (6.0.3.2) lib/abstract_controller/callbacks.rb:41:in `process_action'
actionpack (6.0.3.2) lib/action_controller/metal/rescue.rb:22:in `process_action'
actionpack (6.0.3.2) lib/action_controller/metal/instrumentation.rb:33:in `block in process_action'
activesupport (6.0.3.2) lib/active_support/notifications.rb:180:in `block in instrument'
activesupport (6.0.3.2) lib/active_support/notifications/instrumenter.rb:24:in `instrument'
activesupport (6.0.3.2) lib/active_support/notifications.rb:180:in `instrument'
actionpack (6.0.3.2) lib/action_controller/metal/instrumentation.rb:32:in `process_action'
actionpack (6.0.3.2) lib/action_controller/metal/params_wrapper.rb:245:in `process_action'
activerecord (6.0.3.2) lib/active_record/railties/controller_runtime.rb:27:in `process_action'
actionpack (6.0.3.2) lib/abstract_controller/base.rb:136:in `process'
actionview (6.0.3.2) lib/action_view/rendering.rb:39:in `process'
actionpack (6.0.3.2) lib/action_controller/metal.rb:190:in `dispatch'
actionpack (6.0.3.2) lib/action_controller/metal.rb:254:in `dispatch'
actionpack (6.0.3.2) lib/action_dispatch/routing/route_set.rb:50:in `dispatch'
actionpack (6.0.3.2) lib/action_dispatch/routing/route_set.rb:33:in `serve'
actionpack (6.0.3.2) lib/action_dispatch/journey/router.rb:49:in `block in serve'
actionpack (6.0.3.2) lib/action_dispatch/journey/router.rb:32:in `each'
actionpack (6.0.3.2) lib/action_dispatch/journey/router.rb:32:in `serve'
actionpack (6.0.3.2) lib/action_dispatch/routing/route_set.rb:834:in `call'
warden (1.2.8) lib/warden/manager.rb:36:in `block in call'
warden (1.2.8) lib/warden/manager.rb:34:in `catch'
warden (1.2.8) lib/warden/manager.rb:34:in `call'
rack (2.2.3) lib/rack/tempfile_reaper.rb:15:in `call'
rack (2.2.3) lib/rack/etag.rb:27:in `call'
rack (2.2.3) lib/rack/conditional_get.rb:27:in `call'
rack (2.2.3) lib/rack/head.rb:12:in `call'
actionpack (6.0.3.2) lib/action_dispatch/http/content_security_policy.rb:18:in `call'
rack (2.2.3) lib/rack/session/abstract/id.rb:266:in `context'
rack (2.2.3) lib/rack/session/abstract/id.rb:260:in `call'
actionpack (6.0.3.2) lib/action_dispatch/middleware/cookies.rb:648:in `call'
activerecord (6.0.3.2) lib/active_record/migration.rb:567:in `call'
actionpack (6.0.3.2) lib/action_dispatch/middleware/callbacks.rb:27:in `block in call'
activesupport (6.0.3.2) lib/active_support/callbacks.rb:101:in `run_callbacks'
actionpack (6.0.3.2) lib/action_dispatch/middleware/callbacks.rb:26:in `call'
actionpack (6.0.3.2) lib/action_dispatch/middleware/executor.rb:14:in `call'
actionpack (6.0.3.2) lib/action_dispatch/middleware/actionable_exceptions.rb:17:in `call'
actionpack (6.0.3.2) lib/action_dispatch/middleware/debug_exceptions.rb:32:in `call'
web-console (4.0.4) lib/web_console/middleware.rb:132:in `call_app'
web-console (4.0.4) lib/web_console/middleware.rb:28:in `block in call'
web-console (4.0.4) lib/web_console/middleware.rb:17:in `catch'
web-console (4.0.4) lib/web_console/middleware.rb:17:in `call'
actionpack (6.0.3.2) lib/action_dispatch/middleware/show_exceptions.rb:33:in `call'
railties (6.0.3.2) lib/rails/rack/logger.rb:37:in `call_app'
railties (6.0.3.2) lib/rails/rack/logger.rb:26:in `block in call'
activesupport (6.0.3.2) lib/active_support/tagged_logging.rb:80:in `block in tagged'
activesupport (6.0.3.2) lib/active_support/tagged_logging.rb:28:in `tagged'
activesupport (6.0.3.2) lib/active_support/tagged_logging.rb:80:in `tagged'
railties (6.0.3.2) lib/rails/rack/logger.rb:26:in `call'
sprockets-rails (3.2.1) lib/sprockets/rails/quiet_assets.rb:13:in `call'
actionpack (6.0.3.2) lib/action_dispatch/middleware/remote_ip.rb:81:in `call'
actionpack (6.0.3.2) lib/action_dispatch/middleware/request_id.rb:27:in `call'
rack (2.2.3) lib/rack/method_override.rb:24:in `call'
rack (2.2.3) lib/rack/runtime.rb:22:in `call'
activesupport (6.0.3.2) lib/active_support/cache/strategy/local_cache_middleware.rb:29:in `call'
actionpack (6.0.3.2) lib/action_dispatch/middleware/executor.rb:14:in `call'
actionpack (6.0.3.2) lib/action_dispatch/middleware/static.rb:126:in `call'
rack (2.2.3) lib/rack/sendfile.rb:110:in `call'
actionpack (6.0.3.2) lib/action_dispatch/middleware/host_authorization.rb:82:in `call'
webpacker (4.2.2) lib/webpacker/dev_server_proxy.rb:23:in `perform_request'
rack-proxy (0.6.5) lib/rack/proxy.rb:57:in `call'
railties (6.0.3.2) lib/rails/engine.rb:527:in `call'
puma (4.3.5) lib/puma/configuration.rb:228:in `call'
puma (4.3.5) lib/puma/server.rb:713:in `handle_request'
puma (4.3.5) lib/puma/server.rb:472:in `process_client'
puma (4.3.5) lib/puma/server.rb:328:in `block in run'
puma (4.3.5) lib/puma/thread_pool.rb:134:in `block in spawn_thread'

【问题讨论】:

    标签: ruby-on-rails session-cookies ruby-on-rails-6 impressions impressionist


    【解决方案1】:

    我将使用 impression gem 的旧版 Rails 应用程序更新到版本 6 并遇到了同样的异常。我通过在Gemfile 中为impression gem 指定一个特定的提交来解决它:

    gem 'impressionist',
      git: 'git@github.com:charlotte-ruby/impressionist.git',
      ref: '46a582ff8cd3496da64f174b30b91f9d97e86643'
    
    

    原因是该异常的 fix 不在其最新版本 (2.0.0) 中,而是在其主分支中。

    【讨论】:

    • 朱尔斯,非常感谢!你的回答解决了这个问题。只是好奇,你是怎么发现这个修复在 master 分支中的?
    • 我将 gem 分叉到我的本地开发环境并开始调试。在master无法复现问题时,我查看了app/controllers/impressionist_controller.rb的提交历史,发现修复尚未发布。
    • Jules,您是否通过在 gemfile 中指定此提交成功部署?我刚刚尝试部署到 Heroku,但在构建时,它无法访问 Impressionist git - 说“主机密钥验证失败 - 无法从远程存储库读取”
    • @AaronZ 我刚才使用上面的 sn-p 能够成功部署到 Heroku。虽然我没有部署问题,但我希望替换此 gem 以避免将来出现问题,因为此 gem 不再维护。
    • 当我尝试构建以进行部署时,我在构建日志中收到错误:Fetching gem metadata from https://rubygems.org/............ Fetching git@github.com:charlotte-ruby/impressionist.git Host key verification failed. fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists. 您没有任何这些错误吗?你有没有 git clone 这个 gem 并提交到你自己的本地环境中?感谢您的信息!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-01
    • 1970-01-01
    • 2013-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多