我有一个项目,我最近从rails 5.0迁移到rails 5.1,在此之前我安装了webpacker并使用capistrano进行部署,在rails 5.0中一切正常,但是当我做了更改时,现在capistrano无法完成资产:预编译任务,我收到此错误:
**部署失败 **有关详细信息,请参阅log / capistrano.log。这是最后20行: ..... DEBUG [04ae7a64]命令:cd / home / deploy / my-site / releases / 20170602233846&& (导出RAILS_ENV =“staging”;〜/ .rvm / bin / rvm默认执行bundle exec rake assets:precompile)
DEBUG [04ae7a64]纱线安装v0.24.5
DEBUG [04ae7a64] [1/4]解决方案......
DEBUG [04ae7a64] [2/4]获取包......
DEBUG [04ae7a64]警告fsevents@1.1.1:平台“linux”与此模块不兼容。
DEBUG [04ae7a64] info“fsevents@1.1.1”是可选的依赖项和兼容性检查失败。将其从安装中排除。
DEBUG [04ae7a64] [3/4]链接依赖关系...
DEBUG [04ae7a64] [4/4]建立新包装......
DEBUG [04ae7a64]于9.29s完成。
我正在使用带有ubuntu的本地计算机,并且ubuntu也安装在服务器中。
我不知道fsevents@1.1.1作为依赖项需要在哪里,但是我从2天前就无法进行部署,而且我还没有找到解决方案。
答案 0 :(得分:2)
编辑:我认为原来的Webpacker安装肯定是出错了。使用webpacker的主分支并重新运行bundle exec rake webpacker:install
已解决此问题。
原始答案:
我今天遇到了同样的错误。我认为./bin/yarn install --no-progress
这是Rails rake任务自然运行的,必须返回一个非零退出代码。
首先,我尝试重写yarn:install
rake任务以添加--ignore-optional
,但这不起作用。
我通过添加包含:
的rake任务lib/tasks/yarn.rake
让我的部署成功
namespace :yarn do
desc "Install all JavaScript dependencies as specified via Yarn"
task :install do
puts "Ignoring yarn install failure"
begin
system "./bin/yarn install --no-progress --ignore-optional; true"
rescue
exit(true)
end
exit(true)
end
end
task(:default).clear.enhance(['yarn:install'])
# Run Yarn prior to Sprockets assets precompilation, so dependencies are available for use.
if Rake::Task.task_defined?("assets:precompile")
Rake::Task["assets:precompile"].enhance [ "yarn:install" ]
end
这取代了Rails的默认纱线安装rake任务,几乎可以确保Capistrano不会捕获任何错误。这不是一个好的解决方案,但至少它可以使部署成功。希望合法的纱线安装错误会导致资产构建后期出现另一个错误。