无法在 heroku 上构建和部署 Rails 6.0.4.1 应用程序 - 引发 gyp verb cli 错误

use*_*074 4 ruby heroku gyp ruby-on-rails-6

您好,我正在 heroku 上部署一个分支并抛出此错误。我还尝试部署一个工作完美的分支,但这也显示了相同的错误。

\n

本地纱线版本:1.22.17\n本地节点版本:v12.22.7\n请帮助!!!

\n

尝试在没有yarn.lock和package-lock的情况下构建相同的东西。

\n

这就是通过 CLI 启动 Heroku 部署构建日志的方式

\n
yarn install v1.22.17\nremote:        warning package-lock.json found. Your project contains lock files generated by tools other than Yarn. It is advised not to mix package managers in order to avoid resolution inconsistencies caused by unsynchronized lock files. To clear this warning, remove package-lock.json.\nremote:        [1/5] Validating package.json...\nremote:        [2/5] Resolving packages...\nremote:        [3/5] Fetching packages...\nremote:        [4/5] Linking dependencies...\nremote:        warning " > webpack-dev-server@4.6.0" has unmet peer dependency "webpack@^4.37.0 || ^5.0.0".\nremote:        warning "webpack-dev-server > webpack-dev-middleware@5.2.1" has unmet peer dependency "webpack@^4.0.0 || ^5.0.0".\nremote:        [5/5] Building fresh packages...\nremote:        error /tmp/build_df192222/node_modules/@rails/webpacker/node_modules/node-sass: Command failed.\nremote:        Exit code: 1\nremote:        Command: node scripts/build.js\nremote:        Arguments: \nremote:        Directory: /tmp/build_df192222/node_modules/@rails/webpacker/node_modules/node-sass\nremote:        Output:\nremote:        Building: /tmp/build_df192222/bin/node /tmp/build_df192222/node_modules/@rails/webpacker/node_modules/node-gyp/bin/node-gyp.js rebuild --verbose --libsass_ext= --libsass_cflags= --libsass_ldflags= --libsass_library=\nremote:        gyp info it worked if it ends with ok\nremote:        gyp verb cli [\nremote:        gyp verb cli   '/tmp/build_df192222/bin/node',\nremote:        gyp verb cli   '/tmp/build_df192222/node_modules/@rails/webpacker/node_modules/node-gyp/bin/node-gyp.js',\nremote:        gyp verb cli   'rebuild',\n
Run Code Online (Sandbox Code Playgroud)\n

.\n.\n.\n.\n.\n`

\n
remote:        /app/.node-gyp/16.13.1/include/node/v8-internal.h: In function \xe2\x80\x98void v8::internal::PerformCastCheck(T*)\xe2\x80\x99:\nremote:        /app/.node-gyp/16.13.1/include/node/v8-internal.h:492:38: error: \xe2\x80\x98remove_cv_t\xe2\x80\x99 is not a member of \xe2\x80\x98std\xe2\x80\x99; did you mean \xe2\x80\x98remove_cv\xe2\x80\x99?\nremote:          492 |             !std::is_same<Data, std::remove_cv_t<T>>::value>::Perform(data);\nremote:              |                                      ^~~~~~~~~~~\nremote:              |                                      remove_cv\nremote:        /app/.node-gyp/16.13.1/include/node/v8-internal.h:492:38: error: \xe2\x80\x98remove_cv_t\xe2\x80\x99 is not a member of \xe2\x80\x98std\xe2\x80\x99; did you mean \xe2\x80\x98remove_cv\xe2\x80\x99?\nremote:          492 |             !std::is_same<Data, std::remove_cv_t<T>>::value>::Perform(data);\nremote:              |                                      ^~~~~~~~~~~\nremote:              |                                      remove_cv\nremote:        /app/.node-gyp/16.13.1/include/node/v8-internal.h:492:50: error: template argument 2 is invalid\nremote:          492 |             !std::is_same<Data, std::remove_cv_t<T>>::value>::Perform(data);\nremote:              |                                                  ^\nremote:        /app/.node-gyp/16.13.1/include/node/v8-internal.h:492:63: error: \xe2\x80\x98::Perform\xe2\x80\x99 has not been declared\nremote:          492 |             !std::is_same<Data, std::remove_cv_t<T>>::value>::Perform(data);\nremote:              |                                                               ^~~~~~~\nremote:        ../src/binding.cpp: In function \xe2\x80\x98Nan::NAN_METHOD_RETURN_TYPE render(Nan::NAN_METHOD_ARGS_TYPE)\xe2\x80\x99:\nremote:        ../src/binding.cpp:284:98: warning: cast between incompatible function types from \xe2\x80\x98void (*)(uv_work_t*)\xe2\x80\x99 {aka \xe2\x80\x98void (*)(uv_work_s*)\xe2\x80\x99} to \xe2\x80\x98uv_after_work_cb\xe2\x80\x99 {aka \xe2\x80\x98void (*)(uv_work_s*, int)\xe2\x80\x99} [-Wcast-function-type]\nremote:          284 |     int status = uv_queue_work(uv_default_loop(), &ctx_w->request, compile_it, (uv_after_work_cb)MakeCallback);\nremote:              |                                                                                                  ^~~~~~~~~~~~\nremote:        ../src/binding.cpp: In function \xe2\x80\x98Nan::NAN_METHOD_RETURN_TYPE render_file(Nan::NAN_METHOD_ARGS_TYPE)\xe2\x80\x99:\nremote:        ../src/binding.cpp:320:98: warning: cast between incompatible function types from \xe2\x80\x98void (*)(uv_work_t*)\xe2\x80\x99 {aka \xe2\x80\x98void (*)(uv_work_s*)\xe2\x80\x99} to \xe2\x80\x98uv_after_work_cb\xe2\x80\x99 {aka \xe2\x80\x98void (*)(uv_work_s*, int)\xe2\x80\x99} [-Wcast-function-type]\nremote:          320 |     int status = uv_queue_work(uv_default_loop(), &ctx_w->request, compile_it, (uv_after_work_cb)MakeCallback);\nremote:              |                                                                                                  ^~~~~~~~~~~~\nremote:        In file included from ../../../../../nan/nan.h:58,\nremote:                         from ../src/binding.cpp:1:\nremote:        ../src/binding.cpp: At global scope:\nremote:        /app/.node-gyp/16.13.1/include/node/node.h:821:43: warning: cast between incompatible function types from \xe2\x80\x98void (*)(Nan::ADDON_REGISTER_FUNCTION_ARGS_TYPE)\xe2\x80\x99 {aka \xe2\x80\x98void (*)(v8::Local<v8::Object>)\xe2\x80\x99} to \xe2\x80\x98node::addon_register_func\xe2\x80\x99 {aka \xe2\x80\x98void (*)(v8::Local<v8::Object>, v8::Local<v8::Value>, void*)\xe2\x80\x99} [-Wcast-function-type]\nremote:          821 |       (node::addon_register_func) (regfunc),                          \\\nremote:              |                                           ^\nremote:        /app/.node-gyp/16.13.1/include/node/node.h:855:3: note: in expansion of macro \xe2\x80\x98NODE_MODULE_X\xe2\x80\x99\nremote:          855 |   NODE_MODULE_X(modname, regfunc, NULL, 0)  // NOLINT (readability/null_usage)\nremote:              |   ^~~~~~~~~~~~~\nremote:        ../src/binding.cpp:358:1: note: in expansion of macro \xe2\x80\x98NODE_MODULE\xe2\x80\x99\nremote:          358 | NODE_MODULE(binding, RegisterModule);\nremote:              | ^~~~~~~~~~~\nremote:        make: *** [binding.target.mk:133: Release/obj.target/binding/src/binding.o] Error 1\nremote:        make: Leaving directory '/tmp/build_df192222/node_modules/@rails/webpacker/node_modules/node-sass/build'\nremote:        gyp ERR! build error \nremote:        gyp ERR! stack Error: `make` failed with exit code: 2\nremote:        gyp ERR! stack     at ChildProcess.onExit (/tmp/build_df192222/node_modules/@rails/webpacker/node_modules/node-gyp/lib/build.js:262:23)\nremote:        gyp ERR! stack     at ChildProcess.emit (node:events:390:28)\nremote:        gyp ERR! stack     at Process.ChildProcess._handle.onexit (node:internal/child_process:290:12)\nremote:        gyp ERR! System Linux 4.4.0-1097-aws\nremote:        gyp ERR! command "/tmp/build_df192222/bin/node" "/tmp/build_df192222/node_modules/@rails/webpacker/node_modules/node-gyp/bin/node-gyp.js" "rebuild" "--verbose" "--libsass_ext=" "--libsass_cflags=" "--libsass_ldflags=" "--libsass_library="\nremote:        gyp ERR! cwd /tmp/build_df192222/node_modules/@rails/webpacker/node_modules/node-sass\nremote:        gyp ERR! node -v v16.13.1\nremote:        gyp ERR! node-gyp -v v3.8.0\nremote:        gyp ERR! not ok \nremote:        Build failed with error code: 1\nremote: \nremote:  !\nremote:  !     Precompiling assets failed.\nremote:  !\nremote:  !     Push rejected, failed to compile Ruby app.\nremote: \nremote:  !     Push failed\n
Run Code Online (Sandbox Code Playgroud)\n

虽然它是一个 Rails 应用程序,但我将引擎中的节点添加到了 package.json 中。

\n
{\n  "name": "travel_empire",\n  "private": true,\n  "dependencies": {\n    "@fortawesome/fontawesome-free": "^5.15.4",\n    "@popperjs/core": "^2.10.2",\n    "@rails/actioncable": "^6.0.0",\n    "@rails/activestorage": "^6.0.0",\n    "@rails/ujs": "^6.0.0",\n    "@rails/webpacker": "4.3.0",\n    "bootstrap": "4.3.1",\n    "bootstrap-icons": "^1.5.0",\n    "easy-autocomplete": "^1.3.5",\n    "jquery": "^3.6.0",\n    "jquery-ui-dist": "^1.12.1",\n    "js-autocomplete": "^1.0.4",\n    "node-sass": "^7.0.0",\n    "popper.js": "^1.16.1",\n    "turbolinks": "^5.2.0"\n  },\n  "version": "0.1.0",\n  "devDependencies": {\n    "webpack-dev-server": "^4.6.0"\n  },\n  "engines": {\n    "node": "16.x"\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

宝石文件

\n
source 'https://rubygems.org'\ngit_source(:github) { |repo| "https://github.com/#{repo}.git" }\n\nruby '2.7.3'\n\n# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'\ngem 'rails', '~> 6.0.3', '>= 6.0.3.7'\n\ngem 'mongoid', git: 'https://github.com/mongodb/mongoid.git'\n\n\n# Use Puma as the app server\ngem 'puma', '~> 4.1'\n# Use SCSS for stylesheets\ngem 'sass-rails', '>= 6'\n# Transpile app-like JavaScript. Read more: https://github.com/rails/webpacker\ngem 'webpacker', '~> 4.0'\n# Turbolinks makes navigating your web application faster. Read more: https://github.com/turbolinks/turbolinks\ngem 'turbolinks', '~> 5'\n# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder\ngem 'jbuilder', '~> 2.7'\n# Use Redis adapter to run Action Cable in production\n# gem 'redis', '~> 4.0'\n# Use Active Model has_secure_password\n\n\n# Use Active Storage variant\n# gem 'image_processing', '~> 1.2'\n\n\ngem 'axlsx'\ngem 'caxlsx_rails'\n\n\n#Bootstrap for UI\ngem 'bootstrap', '~> 5.1.0'\ngem 'bootstrap-timepicker-rails', '~> 0.1.3'\ngem 'bootstrap-select-rails', '~> 1.6', '>= 1.6.3'\n#JQuery Rails\ngem 'jquery-rails'\n\n gem 'rails_12factor', group: :production\n# Reduces boot times through caching; required in config/boot.rb\ngem 'bootsnap', '>= 1.4.2', require: false\n\ngroup :development, :test do\n  # Call 'byebug' anywhere in the code to stop execution and get a debugger console\n  gem 'byebug', platforms: [:mri, :mingw, :x64_mingw]\nend\n\ngroup :development do\n  # Access an interactive console on exception pages or by calling 'console' anywhere in the code.\n  gem 'web-console', '>= 3.3.0'\n  gem 'listen', '~> 3.2'\n  gem 'pry'\n  # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring\n  gem 'spring'\n  gem 'spring-watcher-listen', '~> 2.0.0'\nend\n\ngroup :test do\n  # Adds support for Capybara system testing and selenium driver\n  gem 'capybara', '>= 2.15'\n  gem 'selenium-webdriver'\n  # Easy installation and use of web drivers to run system tests with browsers\n  gem 'webdrivers'\n  gem 'cucumber-rails', require: false\n  gem 'database_cleaner'\nend\n\n# Windows does not include zoneinfo files, so bundle the tzinfo-data gem\ngem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]\n\n#HTTParty for RESTful API calls\ngem 'httparty'\n\n\n#Paperclip for storing files\ngem 'paperclip'\ngem "mongoid-paperclip", :require => "mongoid_paperclip"\n\ngem "letter_opener", :group => :development\n
Run Code Online (Sandbox Code Playgroud)\n

小智 16

Heroku 似乎已经更新了构建过程中使用的节点版本,因为我也收到了与 webpacker 相关的相同错误消息:

[4/4] Building fresh packages...
       error /tmp/build_1ea87a91/node_modules/@rails/webpacker/node_modules/node-sass: Command failed.
       Exit code: 1 
Run Code Online (Sandbox Code Playgroud)

由于我的应用程序中的 Rails/webpacker 4.3.0,我的部署失败了。在朋友的帮助下,我通过升级到 webpacker 5.4.3 解决了这个问题。

您可以将 package.json 文件中的 webpacker 版本升级到 5.4.3,或者如果您使用yarn,则运行以下命令:

yarn upgrade @rails/webpacker --latest
Run Code Online (Sandbox Code Playgroud)

  • 我可以确认 `yarn Upgrade @rails/webpacker --latest` 工作正常并解决了我的问题。 (3认同)

小智 8

我遇到了类似的问题,但通过以下步骤解决了。

  1. 运行以下命令。heroku buildpacks:add heroku/nodejs --index 1
  2. 16.x在 package.json中将节点版本从 更新为12.16.2