Rails 两个问题求解

ruby2b · 2019年05月27日 · 最后由 jasl 回复于 2019年05月27日 · 1669 次阅读

环境:Rails 5.2.3, Macos

一、字体文件 production 上无法加载,dev 环境正常

直接下载了个 fontawesome-free 的压缩包,包含了 css、js、和 webfonts,加入到工程中 assets.rb 中如下

Rails.application.config.assets.paths << Rails.root.join("vendor", "fontawesome-free","css")
Rails.application.config.assets.paths << Rails.root.join("vendor", "fontawesome-free","js")
Rails.application.config.assets.paths << Rails.root.join("vendor", "fontawesome-free", "webfonts")
......
Rails.application.config.assets.precompile << /\.(?:otf|svg|eot|woff|ttf|woff2)\z/

然后看 public 下其实预编译的资源文件已存在,但是就是提示无法下载,然而把 fontawesome-free/webfonts 下的文件拷贝到 public 下就可以了,一脸茫然。

二、nginx+puma production log 一直报这个错误,是啥原因,google 也没相关信息

F, [2019-05-27T09:55:48.951985 #1595] FATAL -- : [66991124-3f70-490f-85d6-845eb9bd25b6] F, [2019-05-27T09:55:48.952134 #1595] FATAL -- : [66991124-3f70-490f-85d6-845eb9bd25b6] ActionController::RoutingError (No route matches [GET] "/monitor/alive"): F, [2019-05-27T09:55:48.952182 #1595] FATAL -- : [66991124-3f70-490f-85d6-845eb9bd25b6] F, [2019-05-27T09:55:48.952223 #1595] FATAL -- : [66991124-3f70-490f-85d6-845eb9bd25b6] actionpack (5.2.3) lib/action_dispatch/middleware/debug_exceptions.rb:65:in call' [66991124-3f70-490f-85d6-845eb9bd25b6] actionpack (5.2.3) lib/action_dispatch/middleware/show_exceptions.rb:33:incall' [66991124-3f70-490f-85d6-845eb9bd25b6] railties (5.2.3) lib/rails/rack/logger.rb:38:in call_app' [66991124-3f70-490f-85d6-845eb9bd25b6] railties (5.2.3) lib/rails/rack/logger.rb:26:inblock in call' [66991124-3f70-490f-85d6-845eb9bd25b6] activesupport (5.2.3) lib/active_support/tagged_logging.rb:71:in block in tagged' [66991124-3f70-490f-85d6-845eb9bd25b6] activesupport (5.2.3) lib/active_support/tagged_logging.rb:28:intagged' [66991124-3f70-490f-85d6-845eb9bd25b6] activesupport (5.2.3) lib/active_support/tagged_logging.rb:71:in tagged' [66991124-3f70-490f-85d6-845eb9bd25b6] railties (5.2.3) lib/rails/rack/logger.rb:26:incall' [66991124-3f70-490f-85d6-845eb9bd25b6] actionpack (5.2.3) lib/action_dispatch/middleware/remote_ip.rb:81:in call' [66991124-3f70-490f-85d6-845eb9bd25b6] actionpack (5.2.3) lib/action_dispatch/middleware/request_id.rb:27:incall' [66991124-3f70-490f-85d6-845eb9bd25b6] rack (2.0.7) lib/rack/method_override.rb:22:in call' [66991124-3f70-490f-85d6-845eb9bd25b6] rack (2.0.7) lib/rack/runtime.rb:22:incall' [66991124-3f70-490f-85d6-845eb9bd25b6] activesupport (5.2.3) lib/active_support/cache/strategy/local_cache_middleware.rb:29:in call' [66991124-3f70-490f-85d6-845eb9bd25b6] actionpack (5.2.3) lib/action_dispatch/middleware/executor.rb:14:incall' [66991124-3f70-490f-85d6-845eb9bd25b6] actionpack (5.2.3) lib/action_dispatch/middleware/static.rb:127:in call' [66991124-3f70-490f-85d6-845eb9bd25b6] rack (2.0.7) lib/rack/sendfile.rb:111:incall' [66991124-3f70-490f-85d6-845eb9bd25b6] railties (5.2.3) lib/rails/engine.rb:524:in call' [66991124-3f70-490f-85d6-845eb9bd25b6] puma (3.12.1) lib/puma/configuration.rb:227:incall' [66991124-3f70-490f-85d6-845eb9bd25b6] puma (3.12.1) lib/puma/server.rb:660:in handle_request' [66991124-3f70-490f-85d6-845eb9bd25b6] puma (3.12.1) lib/puma/server.rb:474:inprocess_client' [66991124-3f70-490f-85d6-845eb9bd25b6] puma (3.12.1) lib/puma/server.rb:334:in block in run' [66991124-3f70-490f-85d6-845eb9bd25b6] puma (3.12.1) lib/puma/thread_pool.rb:135:inblock in spawn_thread'

第一个的问题可能原因是你用 assets pipeline 的时候在 css 里怎么引用字体的,需要用 asset_url 来引用,而不能直接使用路径

第二个应该是你代码写矬了 他也说清楚了 找不到 [GET] "/monitor/alive",检查你路由定义

jasl 回复

🙏第一个解答

第二个问题就是很挫,没有地方用到这个路由,也不知道是哪里用到的,后台固定间隔会报这个错,但和实际业务没有影响。。就是看着 log 很烦人。

ruby2b 回复

第二个问题,应该是你页面加载时候找不到某个资源,你用浏览器调试工具里的网络看一下 刷新页面看是哪里需要加载啥没找到

ruby2b 回复

第二个问题有两种可能,首先,Ruby 对于路由不匹配都会报这个,这里有两种可能,一种是有人在扫描你,另一种,你可以这样排查,就是对你部署好的代码(连同预编译好的 Assets)用报错的 /monitor/alive 去做文本检索,看看是哪里搞出来的。不过看 url 的样子,像是某种监控软件定期监听心跳导致的,你也可以查查看

需要 登录 后方可回复, 如果你还没有账号请 注册新账号