我正在按照本教程使用 Rails 引擎的 webpacker:
\nhttp://ben.vandgrift.com/posts/rails-engine-webpacker-1/
\n它是基于这样的:
\nhttps://github.com/rails/webpacker/blob/5-x-stable/docs/engines.md
\n教程和 github 文档内容非常丰富,但我无法让我的主机应用程序包含来自引擎的 javascript。我已在本地克隆了教程中的存储库(saddlebag 是引擎的存储库,saddlebag-dummy 是主机应用程序):
\nhttps://github.com/bvandgrift/saddlebag
\nhttps://github.com/bvandgrift/saddlebag-dummy
\n我所做的唯一修改是更新 mimemagic gem,因为该 gem 的指定版本已从 gem 源中提取。
\n- mimemagic (0.3.5)\n+ mimemagic (0.3.10)\n+ nokogiri (~> 1)\n+ rake\nRun Code Online (Sandbox Code Playgroud)\n当我rails webpacker:compile在主机应用程序目录中运行时,它会生成以下内容:
Hash: 10b1522b0b9c4b8aca2d\nVersion: webpack 4.44.1\nTime: 966ms\nBuilt at: 05/03/2021 2:48:22 PM\n Asset Size Chunks Chunk Names\n js/application-cb05ac1ef9258bc6a611.js 52.7 KiB 0 [emitted] [immutable] application\n js/application-cb05ac1ef9258bc6a611.js.br 11.3 KiB [emitted]\n js/application-cb05ac1ef9258bc6a611.js.gz 12.8 KiB [emitted]\n js/application-cb05ac1ef9258bc6a611.js.map 145 KiB 0 [emitted] [dev] …Run Code Online (Sandbox Code Playgroud) 我正在使用Rails.application.routes.recognize_path将路径分解为其组件--:controller,:action,:id等.它似乎与GET路由一起正常工作,但是对于POST路由,它会变空.这是我的路线文件的相关部分:
resources :units do
member do
get :test_get
post :test_post
end
end
Run Code Online (Sandbox Code Playgroud)
以下是GET的recogn_path的输出:
Rails.application.routes.recognize_path '/units/1/test_get'
=> {:controller=>"units", :action=>"test_get", :id=>"1"}
Run Code Online (Sandbox Code Playgroud)
这是POST的输出:
Rails.application.routes.recognize_path '/units/1/test_post'
ActionController::RoutingError: No route matches "/units/1/test_post"
Run Code Online (Sandbox Code Playgroud)
路线已定义 - 这是输出 rake routes
test_get_unit GET /units/:id/test_get(.:format) units#test_get
test_post_unit POST /units/:id/test_post(.:format) units#test_post
Run Code Online (Sandbox Code Playgroud)
我的道路上缺少什么?我应该使用另一种方法吗?
我有一个项目最近升级到了 Rails 5.2,并且我正在使用 webpacker gem。我在尝试部署到 Heroku 时收到以下错误:
\n\n...\nremote: Webpacker is installed \nremote: Using /tmp/build_b969a2366f45a65a0c09b6aaa4b24667/config/webpacker.yml file for setting up webpack paths\nremote: Compiling\xe2\x80\xa6\nremote: Compilation failed:\nremote: /tmp/build_b969a2366f45a65a0c09b6aaa4b24667/vendor/bundle/ruby/2.5.0/gems/webpacker-3.5.5/lib/webpacker/webpack_runner.rb:11:in `exec\': No such file or directory - /tmp/build_b969a2366f45a65a0c09b6aaa4b24667/node_modules/.bin/webpack (Errno::ENOENT)\nremote: from /tmp/build_b969a2366f45a65a0c09b6aaa4b24667/vendor/bundle/ruby/2.5.0/gems/webpacker-3.5.5/lib/webpacker/webpack_runner.rb:11:in `block in run\'\nremote: from /tmp/build_b969a2366f45a65a0c09b6aaa4b24667/vendor/bundle/ruby/2.5.0/gems/webpacker-3.5.5/lib/webpacker/webpack_runner.rb:10:in `chdir\'\nremote: from /tmp/build_b969a2366f45a65a0c09b6aaa4b24667/vendor/bundle/ruby/2.5.0/gems/webpacker-3.5.5/lib/webpacker/webpack_runner.rb:10:in `run\'\nremote: from /tmp/build_b969a2366f45a65a0c09b6aaa4b24667/vendor/bundle/ruby/2.5.0/gems/webpacker-3.5.5/lib/webpacker/runner.rb:6:in `run\'\nremote: from ./bin/webpack:15:in `<main>\'\n...\nRun Code Online (Sandbox Code Playgroud)\n\n在本地,我的 \'node_modules\' 目录位于 .gitignore 中(我相信 webpacker 安装脚本之一将其放在那里)。
\n\n我是否需要取消忽略node_modules,或者是否需要在配置文件中添加一些内容来告诉远程在哪里可以找到webpack?
\n\n这是我的 package.json:
\n\n{\n "dependencies": {\n "@rails/webpacker": "3.5.5",\n "babel-preset-react": "^6.24.1",\n "d3": "^5.7.0",\n "jquery": "^3.3.1",\n "prop-types": "^15.6.2",\n "react": "^16.5.2",\n …Run Code Online (Sandbox Code Playgroud) 我正在尝试了解 Rails 7 并导入地图,并且正在关注 DHH 的本教程: https://www.youtube.com/watch?v =PtxZvFnL2i0
该视频已有大约一年的历史,基于 Rails 7 的 alpha 版本,但它在一定程度上是有效的。现在我正在努力弄清楚什么改变了或者什么需要改变。
我一直跟踪到 17:18,他将 Vue.js 添加到演示中。这是他第一次向应用程序添加自定义的 JS 文件,而不是导入库。在本教程中,他将以下行添加到 application.js 中:
import "comps/vue_components"
Run Code Online (Sandbox Code Playgroud)
该行在我的实现中失败,并出现以下 JS 错误:
未捕获的类型错误:无法解析模块说明符“comps/vue_components”。相对引用必须以“/”、“./”或“../”开头。
我尝试将该行更新为以下内容来解决该错误:
import "./comps/vue_components"
Run Code Online (Sandbox Code Playgroud)
但这只是默默地失败了。看起来它完全杀死了 javascript 的执行 - 如果我将 console.log 语句放入 application.js 中,只有当我省略或注释掉导入 vue 组件的行时,它才会在控制台中显示。
这是我的 config/importmap.rb 文件:
# Pin npm packages by running ./bin/importmap
pin "application", preload: true
pin "@hotwired/turbo-rails", to: "turbo.min.js", preload: true
pin "@hotwired/stimulus", to: "stimulus.min.js", preload: true
pin "@hotwired/stimulus-loading", to: "stimulus-loading.js", preload: true
pin_all_from "app/javascript/controllers", under: "controllers"
pin "trix" …Run Code Online (Sandbox Code Playgroud)