Rails 6 ActionText 不适用于 Heroku(未定义的方法 'rich_text_area_tag')
Posted
技术标签:
【中文标题】Rails 6 ActionText 不适用于 Heroku(未定义的方法 \'rich_text_area_tag\')【英文标题】:Rails 6 ActionText isn't working on Heroku (undefined method 'rich_text_area_tag')Rails 6 ActionText 不适用于 Heroku(未定义的方法 'rich_text_area_tag') 【发布时间】:2019-12-29 00:11:56 【问题描述】:我正在使用 ActionText 编辑一个段落,它在本地完美运行,但是当我将它部署到 Heroku 具有rich_text_area 表单的页面时,即使我遵循了 rails 指南,它也会抛出一个错误,指出未定义的方法 rich_text_area_tag。我以为我需要在生产环境中配置 Active Storage,但事实并非如此。
这是我在 Heroku 的日志中得到的信息:
ActionView::Template::Error (undefined method 'rich_text_area_tag' for #<#<Class> Did you mean? rich_text_area)
<%= f.label :something, class:'label' %>
<%= f.rich_text_area :something %>
【问题讨论】:
你的错误是undefined method 'rich_text_area_tag'
,但你的代码只有rich_text_area
。您是否仅使用 f.rich_text_area
对其进行了更新?
@allenbrkn 感谢您的评论,我在代码中将其命名为f.rich_text_area
,但我不知道为什么要添加 tag,如果您的意思是我应该删除:something
会导致错误。
部署后是否尝试运行heroku run bundle exec rake db:migrate
、heroku run bundle exec rake assets:precompile
等命令?
@allenbrkn 我尝试了这两种方法,但没有任何改变,仍然出现相同的错误。
你能运行heroku run rails -v
和heroku run ruby -v
看看Heroku 是否在使用你喜欢的Rails/Ruby 版本。大多数时候它会正确使用,但以防万一。另外,你能更新你完整的form
代码吗?
【参考方案1】:
我在网上找到了这个,对我很有帮助:
https://github.com/JoeWoodward/spree_helper_issue
我不确定这是否是正确的方法,但这是一种临时解决方法。
解决方案:
在application_controller.rb
中输入以下内容:
require 'action_text'
class ApplicationController < ActionController::Base
helper ActionText::Engine.helpers
...
end
helper
的文档:https://apidock.com/rails/AbstractController/Helpers/ClassMethods/helper
【讨论】:
感谢@Violeta ?我在app/controllers/application_controller.rb
中添加了require 'action_text'
和helpers ActionText::Engine.helpers
,因为它是in 链接
很高兴能够提供帮助!
工作就像一个魅力,小变化:helper ActionText::Engine.helpers
(没有“s”)我相信这是一个错字:)【参考方案2】:
首先确保您在 config/application.rb 中有这一行:
require 'rails/all'
如果是 rails 6 应用程序 action_text/engine
应该被加载。
如果不是,则可能是 zeitwerk 未加载。当您有一个更新到 rails 6 的 rails 5.2 应用程序时,就会发生这种情况。
在同一个文件 (config/application.rb) 中,您必须将 config.load_defaults 更改为 6.0:
config.load_defaults 6.0
如果您想知道后台发生了什么,请查看第 125 行的 this link。
【讨论】:
感谢您花时间查看它,所以我检查了config/application.rb
我有这两行require 'rails/all'
和config.load_defaults 6.0
唯一对我有用的解决方案是我必须添加require 'action_text'
但我最终手动添加了 trix-editor 标签。 @TopperH
您是否因为某些原因不使用 zeitwerk?
我在config/application.rb
@TopperH 中有config.autoloader = :zeitwerk
【参考方案3】:
为避免混淆ApplicationController
代码,您可以使用初始化程序:
即添加新文件config/initializers/action_text.rb
:
ActiveSupport.on_load(:action_view) do
include ActionText::ContentHelper
include ActionText::TagHelper
end
灵感来自 p8 在封闭的 Rails issue 中的评论。
【讨论】:
以上是关于Rails 6 ActionText 不适用于 Heroku(未定义的方法 'rich_text_area_tag')的主要内容,如果未能解决你的问题,请参考以下文章
@mentions for Users with ActionText in Rails6; Rails6.1更新。
Rails activestorage 不适用于 shopify_app gem