使用 capistrano 和纱线资产部署 rails 5.x 应用程序的正确方法是什么?
What is the proper way to deploy rails 5.x app with capistrano and yarn assets?
我对所有 js 恶作剧都很陌生,过去只是下载我的 js 文件(外部库)并且一切正常。现在我切换到通过 yarn 安装 js-libraries。无论如何,如果我添加或删除 /node_modules
from/to .gitignore
,我总是在 cap production deploy
时收到此错误
Tasks: TOP => deploy:assets:precompile
(See full trace by running task with --trace)
The deploy has failed with an error: Exception while executing on host 92.53.97.113: rake exit status: 1
rake stdout: rake aborted!
Sprockets::FileNotFound: couldn't find file 'jquery' with type 'application/javascript'
Checked in these paths:
如果将 node_modules
添加到 .gitignore
,我可以理解该错误 - 因为我的 js 文件实际上位于此目录中,而我忽略了它,这是合理的,即 jquery 找不到。但是,如果我从 .gitignore
中删除 node_modules
,错误仍然存在。
我尝试将 capistrano-yarn
添加到我的 gemfile,将此代码片段添加到我的 deploy.rb
():
set :nvm_type, :user # or :system, depends on your nvm setup
set :nvm_node, 'v7.10.0'
set :nvm_map_bins, %w{node npm yarn}
set :yarn_target_path, -> { release_path.join('client') } #
set :yarn_flags, '--production --silent --no-progress' # default
set :yarn_roles, :all # default
set :yarn_env_variables, {}
但更多的是在黑暗中采摘,因为我实际上并不知道自己在做什么。
我找不到任何关于如何部署 rails 应用程序的适当教程,其中资产由 yarn 管理。有什么建议吗?
有人可以解释逻辑吗,我的作品将从哪里获取资产?来自 node_modules
文件夹?如果每个人都建议将其添加到 .gitignore
- 那么从哪里来呢?
编辑:
也许值得注意的是,这个应用程序最初是一个 4.x Rails 应用程序,后来现在更新到 Rails 5.1.2。
我的 application.js
也是这样的:
//= require jquery
//= require rails-ujs
//= require_tree ../../../vendor/assets/javascripts/front/first/.
//= require front/second/jquery.bxslider
//= require inputmask/dist/jquery.inputmask.bundle
//= require inputmask/dist/inputmask/phone-codes/phone
//= require inputmask/dist/inputmask/phone-codes/phone-be
//= require inputmask/dist/inputmask/phone-codes/phone-ru
//= require front/second/jquery.masonry.min
//= require front/second/js-url.min
//= require_tree ../../../vendor/assets/javascripts/front/third/.
//= require_self
//= require_tree ../../../app/assets/javascripts/front/.
//= require turbolinks
在开发模式下一切正常。
终于想通了。我必须 运行 以下代码:
bundle config --delete bin
./bin/rails app:update:bin # or rails app:update:bin
这几乎是 webpacker 描述的最底部 here
我对所有 js 恶作剧都很陌生,过去只是下载我的 js 文件(外部库)并且一切正常。现在我切换到通过 yarn 安装 js-libraries。无论如何,如果我添加或删除 /node_modules
from/to .gitignore
,我总是在 cap production deploy
Tasks: TOP => deploy:assets:precompile
(See full trace by running task with --trace)
The deploy has failed with an error: Exception while executing on host 92.53.97.113: rake exit status: 1
rake stdout: rake aborted!
Sprockets::FileNotFound: couldn't find file 'jquery' with type 'application/javascript'
Checked in these paths:
如果将 node_modules
添加到 .gitignore
,我可以理解该错误 - 因为我的 js 文件实际上位于此目录中,而我忽略了它,这是合理的,即 jquery 找不到。但是,如果我从 .gitignore
中删除 node_modules
,错误仍然存在。
我尝试将 capistrano-yarn
添加到我的 gemfile,将此代码片段添加到我的 deploy.rb
(
set :nvm_type, :user # or :system, depends on your nvm setup
set :nvm_node, 'v7.10.0'
set :nvm_map_bins, %w{node npm yarn}
set :yarn_target_path, -> { release_path.join('client') } #
set :yarn_flags, '--production --silent --no-progress' # default
set :yarn_roles, :all # default
set :yarn_env_variables, {}
但更多的是在黑暗中采摘,因为我实际上并不知道自己在做什么。
我找不到任何关于如何部署 rails 应用程序的适当教程,其中资产由 yarn 管理。有什么建议吗?
有人可以解释逻辑吗,我的作品将从哪里获取资产?来自 node_modules
文件夹?如果每个人都建议将其添加到 .gitignore
- 那么从哪里来呢?
编辑: 也许值得注意的是,这个应用程序最初是一个 4.x Rails 应用程序,后来现在更新到 Rails 5.1.2。
我的 application.js
也是这样的:
//= require jquery
//= require rails-ujs
//= require_tree ../../../vendor/assets/javascripts/front/first/.
//= require front/second/jquery.bxslider
//= require inputmask/dist/jquery.inputmask.bundle
//= require inputmask/dist/inputmask/phone-codes/phone
//= require inputmask/dist/inputmask/phone-codes/phone-be
//= require inputmask/dist/inputmask/phone-codes/phone-ru
//= require front/second/jquery.masonry.min
//= require front/second/js-url.min
//= require_tree ../../../vendor/assets/javascripts/front/third/.
//= require_self
//= require_tree ../../../app/assets/javascripts/front/.
//= require turbolinks
在开发模式下一切正常。
终于想通了。我必须 运行 以下代码:
bundle config --delete bin
./bin/rails app:update:bin # or rails app:update:bin
这几乎是 webpacker 描述的最底部 here