2

我有一个项目,我最近从 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 && ( export RAILS_ENV="staging" ; ~/.rvm/bin/rvm default do bundle exec rake assets:precompile )

调试 [04ae7a64] 纱线安装 v0.24.5

调试 [04ae7a64] [1/4] 解决包...

调试 [04ae7a64] [2/4] 正在获取包...

调试 [04ae7a64] 警告 fsevents@1.1.1:平台“linux”与此模块不兼容。

DEBUG [04ae7a64] info "fsevents@1.1.1" 是一个可选依赖项,兼容性检查失败。从安装中排除它。

调试 [04ae7a64] [3/4] 链接依赖项...

调试 [04ae7a64] [4/4] 构建新包...

调试 [04ae7a64] 在 9.29 秒内完成。

我正在使用带有 ubuntu 的本地计算机,并且 ubuntu 也安装在服务器中。

我不知道在哪里需要 fsevents@1.1.1 作为依赖项,但自 2 天前以来我无法进行部署,而且我还没有找到解决方案。

4

1 回答 1

3

编辑:我认为我原来的 Webpacker 安装一定是出了问题。使用 webpacker 的 master 分支并重新运行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 的默认 yarn install rake 任务,几乎可以确保 Capistrano 不会捕获任何错误。这不是一个好的解决方案,但至少它可以使部署成功。希望一个合法的 yarn install 错误会在以后的资产构建中导致另一个错误。

于 2017-06-08T20:11:27.710 回答