【问题标题】:Building Rails 3 Engine Throwing Gem::Package::TooLongFileName Error构建 Rails 3 引擎抛出 Gem::Package::TooLongFileName 错误
【发布时间】:2013-01-17 03:17:14
【问题描述】:

我正在尝试使用 gem build myengine 构建我的引擎,但我不断收到以下错误:

ERROR:  While executing gem ... (Gem::Package::TooLongFileName)
    Gem::Package::TooLongFileName

我不认为myengine 的名字不会太长。知道这里可能发生了什么吗?

【问题讨论】:

    标签: gem ruby-on-rails-3.2 rails-engines


    【解决方案1】:

    我通过找到导致问题的确切文件解决了这个问题 - 它是一个名称很长的迁移文件。

    对于那些感兴趣的人,错误是从rubygems源代码的TarWriter类的split_name方法抛出的。如果出现以下情况,将引发此错误:

    1. 文件的相对路径,包括文件名本身,大于 256 个字符
    2. 文件名超过 100 个字符
    3. 文件前缀大于 155 个字符

    我希望这会有所帮助。我在下面附上了split_name 方法的源代码以供查看。

    def split_name(name) # :nodoc:
      raise Gem::Package::TooLongFileName if name.size > 256
    
      if name.size <= 100 then
        prefix = ""
      else
        parts = name.split(/\//)
        newname = parts.pop
        nxt = ""
    
        loop do
          nxt = parts.pop
          break if newname.size + 1 + nxt.size > 100
          newname = nxt + "/" + newname
        end
    
        prefix = (parts + [nxt]).join "/"
        name = newname
    
        if name.size > 100 or prefix.size > 155 then
          raise Gem::Package::TooLongFileName
        end
      end
    
      return name, prefix
    end
    

    【讨论】:

    • 哇。这确实是落后了。我刚刚向 ruby​​gem-github 提交了一个问题,以摆脱这种任意限制。编写它并将其推入红宝石的人一定是一个无知的随机菜鸟。我实际上用谷歌搜索了那个错误,发现人们遇到同样问题的 github 问题。显然写它的人认为 155 是一个神圣的数字。如果他将限制设置为 42...
    【解决方案2】:

    我通过将 ruby​​gems 更新到 1.8.25 (gem update --system) 解决了这个问题

    -编辑-

    检查您的 project.gemspec 文件: 注释掉

    s.files = ... or s.test_files = ...
    

    如果您的项目中有任何文件名称过长

    【讨论】:

    • 感谢您的建议,但我的问题仍然存在。
    • “我不希望我的引擎名字不会太长。”您的项目中可能有任何文件导致此错误,而不仅仅是项目名称。
    • 注释掉s.test_files 解决了Gem::Package::TooLongFileName 被抛出的问题,但我不能真正注释掉。这些文件需要包含在 gem 中。
    • 确实如此,但也许您的测试文件中的文件名太长(控制器规范名称很长)?
    • 在测试/虚拟应用中
    【解决方案3】:

    我遇到了同样的问题并通过删除 test/dummy/tmp 文件夹和 .sass_cache 文件夹来解决它,因为它们包含长文件名

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-08
      • 2018-02-15
      • 1970-01-01
      • 2016-02-08
      • 1970-01-01
      相关资源
      最近更新 更多