【问题标题】:How can I fix a Rails 5 precompile assets rb_sysopen error?如何修复 Rails 5 预编译资产 rb_sysopen 错误?
【发布时间】:2023-02-01 20:31:40
【问题描述】:

我正在尝试在本地预编译资产(用于生产),但出现错误。

我的步骤:

  1. bundle exec rake assets:clobber --trace(删除公共/资产,以便我执行干净的编译)
  2. bundle exec rake assets:precompile RAILS_ENV=production --trace(编译准备上传到 GitHub/Heroku 的资产)

    我在用:Rails (5.2.2)、Ruby (2.6.6)、Bundler (2.4.4)、Windows (10)

    怎么了我的很多 .js / .css / .jpg / .png 文件似乎都可以预编译,但是当它到达这个 glyphicons-halflings-regular 文件时总是会出错。 (实际上 24 小时前它在一个 .png 文件上绊倒了——我不确定从那以后发生了什么变化——我想我更新了捆绑器版本,现在它在另一个文件上失败了)

    错误信息:

    Errno::ENOENT: No such file or directory @ rb_sysopen - C:/Users/..../...../public/assets/flatty/bootstrap/glyphicons-halflings-regular-5ff7c239555476e939e86d457bb78424b945b733b2c23791d9807c2357259d43.eot.103323240.10692.178366
    C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/sprockets-3.7.2/lib/sprockets/path_utils.rb:278:in `initialize'
    C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/sprockets-3.7.2/lib/sprockets/path_utils.rb:278:in `open'
    C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/sprockets-3.7.2/lib/sprockets/path_utils.rb:278:in `atomic_write'
    C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/sprockets-3.7.2/lib/sprockets/asset.rb:165:in `write_to'
    C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/sprockets-3.7.2/lib/sprockets/manifest.rb:210:in `block (2 levels) in compile'
    C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/concurrent-ruby-1.1.8/lib/concurrent-ruby/concurrent/executor/safe_task_executor.rb:24:in `block in execute'
    C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/concurrent-ruby-1.1.8/lib/concurrent-ruby/concurrent/synchronization/mutex_lockable_object.rb:41:in `block in synchronize'
    C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/concurrent-ruby-1.1.8/lib/concurrent-ruby/concurrent/synchronization/mutex_lockable_object.rb:41:in `synchronize'
    C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/concurrent-ruby-1.1.8/lib/concurrent-ruby/concurrent/synchronization/mutex_lockable_object.rb:41:in `synchronize'
    C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/concurrent-ruby-1.1.8/lib/concurrent-ruby/concurrent/executor/safe_task_executor.rb:19:in `execute'
    C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/concurrent-ruby-1.1.8/lib/concurrent-ruby/concurrent/ivar.rb:169:in `safe_execute'
    C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/concurrent-ruby-1.1.8/lib/concurrent-ruby/concurrent/future.rb:55:in `block in execute'
    C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/concurrent-ruby-1.1.8/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb:363:in `run_task'
    C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/concurrent-ruby-1.1.8/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb:352:in `block (3 levels) in create_worker'
    C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/concurrent-ruby-1.1.8/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb:335:in `loop'
    C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/concurrent-ruby-1.1.8/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb:335:in `block (2 levels) in create_worker'
    C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/concurrent-ruby-1.1.8/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb:334:in `catch'
    C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/concurrent-ruby-1.1.8/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb:334:in `block in create_worker'
    Tasks: TOP => assets:precompile
    

    问题:

    有任何想法吗?我知道我的很多 gem 都在旧版本上,但是这个预编译曾经对我有用,我不知道发生了什么变化。可能是因为某些 gems 或 ruby​​ 或 bundler 或其他东西正在使用旧版本(但它们曾经工作过?)

【问题讨论】:

  • 更新:我恢复到 bundler 1.17.3 并得到了同样的错误

标签: ruby-on-rails assets precompile


【解决方案1】:

在尝试了其他线程的许多不同想法后(例如删除文件和文件夹名称中的连字符,删除“。”等)我发现对我来说问题是事实文件的本地路径太长.

如果我到 C:/Users//Documents/.../.../.../public/assets/.... .png 的路径是 240 个字符,则它不起作用。如果路径是 216 个字符,则预编译工作正常。

因此,只需将数据库克隆到具有短文件名的本地文件夹中即可减少这些路径的长度,并且预编译工作正常。
也许将来我需要缩短应用程序中的文件夹名称,或者减少硬盘驱动器上应用程序的路径深度。
也许甚至有一种方法允许应用程序中的文件使用长路径名,但我找不到这样的设置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-14
    • 1970-01-01
    • 2018-07-04
    • 2017-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多