【发布时间】:2018-08-10 12:40:30
【问题描述】:
我正在开发一个托管在 Heroku 上的 Ruby on Rails Web 应用程序。我正在使用 Zerb Foundation 5 进行样式设置,它在开发环境中运行良好。如果我将环境更改为生产环境并重新启动服务器,Foundation 组件将无法正确呈现。我相信这是一个 Jquery 问题。以下是下拉列表的外观/在生产环境中如何显示的示例:
在生产中运行时出现以下错误:
Uncaught TypeError: ht.each is not a function
at VM417 application-d4dfc26bd5c2527cd0b1b3ce283f89526f6a65ed0527799d75ae98ccd0415867.js:1
at VM417 application-d4dfc26bd5c2527cd0b1b3ce283f89526f6a65ed0527799d75ae98ccd0415867.js:1
at VM417 application-d4dfc26bd5c2527cd0b1b3ce283f89526f6a65ed0527799d75ae98ccd0415867.js:1
这将我引向这一行:
"function" == typeof Symbol && (ht.fn[Symbol.iterator] = nt[Symbol.iterator]),
ht.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "), function(t, e) {
lt["[object " + e + "]"] = e.toLowerCase()
});
我已经尝试过预编译和清理资产:
$ rails assets:clean
$ RAILS_ENV=production bundle exec rails assets:precompile
生产数据库已创建并播种。我对环境配置文件进行了一些修改以尝试调试此问题。由于问题仅在生产中,因此对我来说这就是问题的来源是有意义的。
config/environments/production.rb
Rails.application.configure do
config.cache_classes = true
config.eager_load = true
config.consider_all_requests_local = false
config.action_controller.perform_caching = true
config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present?
config.assets.js_compressor = :uglifier
config.assets.digest = true
config.assets.compile = true
config.active_storage.service = :local
config.log_level = :debug
config.log_tags = [ :request_id ]
config.action_mailer.perform_caching = false
config.i18n.fallbacks = true
config.active_support.deprecation = :notify
config.log_formatter = ::Logger::Formatter.new
if ENV["RAILS_LOG_TO_STDOUT"].present?
logger = ActiveSupport::Logger.new(STDOUT)
logger.formatter = config.log_formatter
config.logger = ActiveSupport::TaggedLogging.new(logger)
end
config.active_record.dump_schema_after_migration = false
end
javascripts/applciation.js
//= require jquery
//= require rails-ujs
//= require turbolinks
//= require foundation
//= require_tree .
$(document).on('turbolinks:load', function() {
$(function(){ $(document).foundation(); });
});
通过研究,我遇到此错误的可能原因是:
- 多个 Foundation 内含物
- uglifier 的一些错误导致变量名更改为“ht”(似乎不太可能)
- 生产配置未正确设置
我一直在学习heroku 教程:
https://devcenter.heroku.com/articles/rails-asset-pipeline#troubleshooting
https://devcenter.heroku.com/articles/rails-4-asset-pipeline
在此先感谢,如果有什么可以帮助包含的内容,请告诉我,我不想用更多代码把帖子弄得乱七八糟,哈哈 :)
【问题讨论】:
-
知道
ht是什么,或者它提供了什么吗?我曾经有一个语法无效的 JS 库,它只在资产编译期间中断。我只是通过逐一删除资产来解决的。尝试在您的开发机器上执行RAILS_ENV=development rake assets:clobber assets:precompile,看看您是否可以在本地触发故障。 -
"Boolean Number String Function Array Date RegExp Object Error Symbol"确实出现在jQuery core source code 中,所以我预计资产压缩会导致此问题。 -
@AaronBreckenridge 我不知道 ht 是什么,我认为它来自 jquery,因为这似乎是问题所在。运行它并重新启动开发 Rails 服务器,它仍然可以正常呈现。还尝试清除缓存并手动删除资产,但两者都没有任何影响:/
-
资产压缩是否在开发中?如果是,您应该在 config/environments/development.rb 中看到
config.assets.js_compressor = :uglifier。 (见stackoverflow.com/a/44265553/717626) -
@AaronBreckenridge 我从 application.js 中删除了
//= require rails-ujs,它现在可以工作了。我会将其发布为答案并解决此问题,感谢您的帮助:)
标签: ruby-on-rails ruby heroku zurb-foundation