【问题标题】:`Errno::EExist` error with sprockets when running rails in dev`Errno::EExist` 在 dev 中运行 rails 时出现链轮错误
【发布时间】:2016-11-10 04:20:27
【问题描述】:

我现在已经多次发生这种情况,我希望有人可以对以下错误提供一些见解:

Errno::EEXIST 在 / 文件存在@dir_s_mkdir - tmp/cache/assets/sprockets/v3.0/Pd

这是相关的堆栈跟踪:

Errno::EEXIST - File exists @ dir_s_mkdir - /home/dev/keithgw-dev/code/myapp/tmp/cache/assets/sprockets/v3.0/Pd:
() opt/rubies/ruby-2.2.2/lib64/ruby/2.2.0/fileutils.rb:252:in `fu_mkdir'
() opt/rubies/ruby-2.2.2/lib64/ruby/2.2.0/fileutils.rb:226:in `block (2 levels) in mkdir_p'
() opt/rubies/ruby-2.2.2/lib64/ruby/2.2.0/fileutils.rb:224:in `block in mkdir_p'
() opt/rubies/ruby-2.2.2/lib64/ruby/2.2.0/fileutils.rb:210:in `mkdir_p'
sprockets (3.6.0) lib/sprockets/cache/file_store.rb:85:in `set'
sprockets (3.6.0) lib/sprockets/cache.rb:212:in `set'
sprockets (3.6.0) lib/sprockets/cache.rb:136:in `set'
sprockets (3.6.0) lib/sprockets/loader.rb:321:in `fetch_asset_from_dependency_cache'
sprockets (3.6.0) lib/sprockets/loader.rb:44:in `load'
sprockets (3.6.0) lib/sprockets/cached_environment.rb:20:in `block in initialize'
sprockets (3.6.0) lib/sprockets/cached_environment.rb:47:in `load'
sprockets (3.6.0) lib/sprockets/base.rb:66:in `find_asset'
sprockets (3.6.0) lib/sprockets/base.rb:73:in `find_all_linked_assets'
sprockets (3.6.0) lib/sprockets/manifest.rb:142:in `block in find'
sprockets (3.6.0) lib/sprockets/legacy.rb:114:in `block (2 levels) in logical_paths'
sprockets (3.6.0) lib/sprockets/path_utils.rb:223:in `block in stat_tree'
sprockets (3.6.0) lib/sprockets/path_utils.rb:207:in `block in stat_directory'
sprockets (3.6.0) lib/sprockets/path_utils.rb:204:in `stat_directory'
sprockets (3.6.0) lib/sprockets/path_utils.rb:222:in `stat_tree'
sprockets (3.6.0) lib/sprockets/legacy.rb:105:in `block in logical_paths'
sprockets (3.6.0) lib/sprockets/legacy.rb:104:in `logical_paths'
sprockets (3.6.0) lib/sprockets/manifest.rb:140:in `find'
sprockets-rails (3.0.4) lib/sprockets/railtie.rb:49:in `precompiled_assets'
sprockets-rails (3.0.4) lib/sprockets/railtie.rb:34:in `asset_precompiled?'
sprockets-rails (3.0.4) lib/sprockets/railtie.rb:214:in `block (3 levels) in <class:Railtie>'
sprockets-rails (3.0.4) lib/sprockets/rails/helper.rb:345:in `precompiled?'
sprockets-rails (3.0.4) lib/sprockets/rails/helper.rb:349:in `raise_unless_precompiled_asset'
sprockets-rails (3.0.4) lib/sprockets/rails/helper.rb:334:in `find_debug_asset'
sprockets-rails (3.0.4) lib/sprockets/rails/helper.rb:216:in `block in lookup_debug_asset'
sprockets-rails (3.0.4) lib/sprockets/rails/helper.rb:229:in `block in resolve_asset'
sprockets-rails (3.0.4) lib/sprockets/rails/helper.rb:228:in `resolve_asset'
sprockets-rails (3.0.4) lib/sprockets/rails/helper.rb:215:in `lookup_debug_asset'
sprockets-rails (3.0.4) lib/sprockets/rails/helper.rb:157:in `block in stylesheet_link_tag'
sprockets-rails (3.0.4) lib/sprockets/rails/helper.rb:156:in `stylesheet_link_tag'
() home/dev/keithgw-dev/code/myapp/app/views/layouts/application.html.erb:8:in `_app_views_layouts_application_html_erb__3086746537636264556_24830040'

似乎无法在tmp/cache 中创建随机子目录以缓存动态编译的资产(我在development 模式下运行)。但是,错误消息中显示的目录确实存在。

清除临时缓存并重新启动 rails 并不能解决问题。我能够解决这个问题的唯一方法是在其他地方的同一系统上启动另一个 Rails 应用程序。在那之后,我杀死它并重新启动失败的应用程序,它再次工作。没有真正的证据表明这是一个实际的工作,或者这只是一个巧合。

无论如何,我很想听听其他曾经经历过这种情况的人的意见,或者是否有人能够解释为什么会发生这种情况。

谢谢。

  • 导轨 - 4.2.6
  • Ruby - 2.2.2

【问题讨论】:

  • 我现在在一个项目的新克隆上遇到了这个问题,该项目在我的另一台机器上运行良好。我没有更多信息。

标签: ruby-on-rails-4 asset-pipeline assets sprockets


【解决方案1】:

显然我的 Google-fu 今天很强大。我发现了一张针对 Sprockets 3.6.0 的票证,该票证与不区分大小写的文件系统有关。见https://github.com/rails/sprockets/issues/283

(这是我的情况,无论如何,在 Windows 主机上运行 vagrant)

很遗憾,项目的维护者似乎仍在讨论修复。

【讨论】:

  • 确实是强大的 google-fu。原来这就是它。即使我在 Linux 环境中工作,我的主目录也是从 Windows 共享挂载的,所以我仍然受制于不区分大小写的文件名。回滚链轮有效,但我正在考虑将我的工作转移到本地安装的卷上。谢谢!
【解决方案2】:

您可以尝试删除tmp 文件夹,在主机中的某处创建并链接它。

rm -rf tmp
mkdir /tmp/rails-app
ln -s /tmp/rails-app tmp

【讨论】:

    猜你喜欢
    • 2020-12-16
    • 2017-05-14
    • 1970-01-01
    • 1970-01-01
    • 2021-09-11
    • 2021-05-22
    • 2023-02-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多