gemspec ไม่ถูกต้องเนื่องจากรูปแบบวันที่ในข้อกำหนด


89

เมื่อฉันรวมอัญมณีที่ฉันสร้างขึ้นด้วย Bundler (เวอร์ชัน 1.0.12) ใน Gemfile จากนั้นฉันพยายามที่จะรวมกลุ่มหรือเขี่ยแบบนั้น:

$ rake

ฉันได้รับข้อความแสดงข้อผิดพลาดนี้:

Invalid gemspec in [/Users/zagzag/.rvm/gems/ruby-1.9.2-p180@foobar/specifications/myplugin-1.0.0.gemspec]: invalid date format in specification: "2011-04-21 00:00:00.000000000Z"

ฉันใช้ Mac OS X รุ่นล่าสุด (10.6.4) พร้อมด้วย:

$ ruby -v
ruby 1.9.2p180 (2011-02-18 revision 30909) [x86_64-darwin10.4.0]

และ:

$ gem -v
Invalid gemspec in [/Users/zagzag/.rvm/gems/ruby-1.9.2-p180@foobar/specifications/myplugin-1.0.0.gemspec]: invalid date format in specification: "2011-04-21 00:00:00.000000000Z"
1.7.2

ฉันไม่เห็นวิธีแก้ปัญหานี้จริงๆ ขอบคุณสำหรับความคิดใด ๆ


ตอนนี้ฉันได้รับข้อผิดพลาดอย่างต่อเนื่อง !!! คุณแก้ไขอย่างไร? สองคำตอบป่านนี้ไม่เป็นประโยชน์ ...
Meltemi

สิ่งที่ทุกคนแนะนำคืออ่านไฟล์เท่านั้น ฉันจะเปลี่ยนได้อย่างไร?
chhantyal

คำตอบ:


143

นี่คือวิธีที่ฉันแก้ไขข้อผิดพลาด "รูปแบบวันที่ไม่ถูกต้องในข้อกำหนด":

1. ) ไปที่โฟลเดอร์ข้อมูลจำเพาะซึ่งอยู่ที่:

/usr/local/lib/ruby/gems/1.8/specifications/

2. ) ค้นหาข้อมูลจำเพาะที่เป็นสาเหตุของปัญหา

3. ) เปลี่ยนs.date = %q{2011-05-21 00:00:00.000000000Z}เป็นs.date = %q{2011-05-21}

นั่นคือชัยชนะสำหรับฉัน! โชคดี


ทำงานรักษานี่กำลังทำให้หัวของฉัน!
David Archer

ทำงานให้ฉัน! ฉันใช้ Windows XP ที่ติดตั้ง Ruby 1.8 em.websocket-0.3.2.gemspec ส่งข้อผิดพลาดนี้ให้ฉันเมื่อพยายามใช้ 'livereload' ( livereload.com )
program247365

ทำงานให้ฉันด้วยบน linux บน 1.6.4 เรื้อรัง
Gepsens

มันแก้ไขปัญหาสำหรับอัญมณีหนึ่งชิ้น แต่การติดตั้งอัญมณีต่อไปนี้อาจทำให้เกิดข้อผิดพลาดนี้อีกครั้ง
MickaelFM

2
นี่มันทำให้ฉันแทบคลั่ง ... ฉันควรจะเปลี่ยนอัญมณีของบุคคลที่สาม 50 อัญมณีหรือไม่? ทำไมพวกเขาไม่อัปเดต gemspecs ผ่านไปหนึ่งปี ..
oma

60

นี่คือคำสั่งเพื่อแก้ไขสิ่งนี้สำหรับอัญมณีทั้งหมดของคุณ:

perl -p -i -e 's/ 00:00:00.000000000Z//' ~/gems/specifications/*.gemspec

แปลงs.date = %q{2011-05-21 00:00:00.000000000Z}เป็นs.date = %q{2011-05-21}และควรแก้ไขปัญหาของคุณ


เคล็ดลับที่ดีในการสำรองข้อมูลอย่างรวดเร็วก่อนทำสิ่งนี้:git init . && git commit -am "backup
troyt

ทำไมพยายามเปลี่ยนรูปแบบวันที่มันบอกว่าฉันไม่มีสิทธิ์ทำเช่นนั้น จะทำอย่างไร?
chhantyal

@chhantyal คุณต้องเรียกใช้เป็น sudo แล้ว ขอบคุณมากสำหรับเรื่องนี้! ช่วยฉันประหยัดเวลาได้มาก
Matt McClure

21

โปรดสังเกตความคิดเห็นจาก Damian Nowak คำสั่งเหล่านี้อาจทำให้ทับทิมของคุณเลอะ!

บน Ubuntu 11.10 สิ่งต่อไปนี้แก้ไขข้อผิดพลาดนี้:

sudo gem install rubygems-update
sudo update_rubygems     

สิ่งต่อไปนี้อาจใช้ได้กับบางระบบ แต่ใช้กับ Debian ไม่ได้:

sudo gem update --system

เยี่ยมมากยังใช้งานได้กับ oneiric เวอร์ชันสุดท้าย แต่ดูเหมือนว่าจะทำความสะอาดอัญมณีที่ติดตั้งด้วยตนเองทั้งหมด
zehrer

1
อย่าใช้มัน มันทำให้ทับทิมของฉันยุ่ง ฉันต้อง rm -rf ของมากมายและเปลี่ยนกลับไปใช้ทับทิมดั้งเดิมจาก repo ติดตั้ง Rubygems ทั้งหมดด้วยตนเองหรือใช้ Rubygems ที่ Ubuntu ให้มา หรือคุณอาจมองหาทับทิมปัจจุบันใน PPA (ฉันหวังว่าฉันจะสามารถยกเลิก +1 ของฉันที่ทำขึ้นเมื่อประมาณหนึ่งเดือนที่แล้ว)
Nowaker

1
@DamianNowak เสียใจที่ได้ยินสิ่งนี้ ฉันเพิ่มคำเตือนในคำตอบ!
ทำเครื่องหมาย

14

คุณสามารถอัปเกรดgemไฟล์. ในการแก้ไขปัญหานี้คุณสามารถแก้ไขgemspecไฟล์ได้โดยตรง - จาก

2011-04-21 00:00:00.000000000Z

ถึง

YYYY-MM-DD

หรืออัพเกรดรางของคุณด้วย

sudo gem update rails

จะแก้ไขปัญหาได้


@Meltemi มันจะอยู่ภายใต้specificationsไดเร็กทอรีนี่คือspecificationsเส้นทางไดเร็กทอรีของฉัน-/home/sayuj/.rvm/gems/ruby-1.9.2-p180/specifications/
Sayuj

+1 สำหรับการอัปเดตราง - แก้ไขปัญหาได้แม้ว่าจะมีคำเตือนเดียวกันในตอนเริ่มต้น แต่ก็ติดตั้งอย่างถูกต้องและปัญหาจะไม่เกิดขึ้นอีกต่อไป
Adam Davis

6

ไม่ระบุเวลา ... แค่วันที่. 2011-04-21ควรทำงานได้ดี


Gem :: Specification.new do | s | s.name = "myplugin" s.version = "1.0.0" s.platform = Gem :: Platform :: RUBY s.authors = ["... "] s.email = ["... "] s .homepage = "http: // ... " s.summary =% q {... } s.description =% q {... } s.rubyforge_project = "myplugin" s.files = git ls-files.split ("\ n ") s.test_files = git ls-files -- {test,spec,features}/*.split (" \ n ") s.require_paths = [" lib "] end
Zag zag ..

ขอบคุณสำหรับคำตอบ. ฉันเห็นด้วยกับคุณ แต่ฉันไม่ได้ใช้วันที่หรือวันที่และเวลาในไฟล์ myplugin.gemspec Bundler สร้างอัญมณีโดยอัตโนมัติ ฉันคิดว่าปัญหานี้อาจเป็นเพราะ Bundler หรือ RVM ... มันแปลก
Zag zag ..

4

มีปัญหาเดียวกัน ดูเหมือนแมลงในทับทิม นี่คือข้อตกลงที่แก้ไข: https://github.com/rubygems/rubygems/commit/21cccd55b823848c5e941093a615b0fdd6cd8bc7

คุณต้องอัปเดตทับทิมและบันเดิลเลอร์เป็นเวอร์ชันล่าสุด หากคุณยังคงมีปัญหาหลังจากนั้นคุณอาจต้องลบและติดตั้งอัญมณีที่ทำให้คุณมีปัญหาใหม่


ยกเว้น Redmine ใช้ Rails เวอร์ชัน 2.3.11 ของตัวเอง Rails 2.3.11 ล้มเหลวด้วย RubyGems> = 1.7.0 และการคอมมิตที่คุณพูดถึงคือวันที่ 19 พฤษภาคม 2011 ซึ่งเป็นโพสต์ 1.7.0 (1 เมษายน, 2554). เดาว่าในกรณีนี้คุณต้องแก้ไขไฟล์ข้อมูลจำเพาะ
Olivier 'Ölbaum' Scherler

3

นี่เป็นความคิดเห็นมากกว่าสำหรับคำตอบของเบ็นฮอล แต่ดูเหมือนว่าฉันยังไม่มีสิทธิ์นั้น

การอัปเดตอัญมณีไม่ได้ผลฉันคิดว่ามันไม่สามารถโหลดอัญมณีได้เนื่องจากรูปแบบวันที่ไม่ถูกต้อง การเปลี่ยนวันที่ด้วยตนเองนั้นน่าหงุดหงิดเกินกว่าจะไปทีละรายการดังนั้น grep:

grep -i *.gemspec -e '.*s\.date.*=.*%q{\(....-..-..\) \(.*Z\)}

และสำหรับ sed:

sed -i -e 's/\(.*\)s\.date.*=.*%q{\(....-..-..\) \(.*Z\)}/\1s.date = %q\{\2}/p' ./*.gemspec

และยอมรับความเสี่ยงของคุณเอง !! ฉันยังคงเป็นมือใหม่ แต่มันก็ใช้ได้สำหรับฉัน;)


2

บนเซิร์ฟเวอร์ slicehost ของฉันโฟลเดอร์ข้อมูลจำเพาะตั้งอยู่ในจุดอื่น นี่คือเส้นทาง:

/usr/lib/ruby/gems/1.8/specifications

ข้อผิดพลาดที่ระบุควรให้เส้นทางไปยังโฟลเดอร์ข้อมูลจำเพาะ


2

แนวทางปืนลูกซอง:ถอนการติดตั้งอัญมณีทั้งหมดและรันบันเดิลใหม่

  1. gem list --no-version | xargs gem uninstall -aIx
  2. rm -i `rvm gemdir`/specifications/*.gemspec
  3. gem update --system
  4. gem install bundler
  5. bundle install

หากคุณใช้.rvmrcไฟล์โปรดระมัดระวังในการรันบรรทัดที่ 2 เนื่องจาก gemdir อาจให้ผลลัพธ์เพิ่มเติม
Jared Beck

1

(จนกว่าการแก้ไขข้อบกพร่องจะเข้าสู่ Rubygems ที่เสถียร) ฉันแก้ไขได้โดยการติดตั้งอัญมณีที่สร้างคำเตือนเวอร์ชันเดียวกันใหม่โดยใช้สวิตช์ --version ของคำสั่ง gem


1

ดังที่ Ben Hall กล่าวคุณต้องแก้ไขไฟล์ gemspec ที่อาจเปลี่ยนแปลงสำหรับระบบเป็นระบบ หากต้องการทราบว่าไฟล์ใดอยู่ให้ดูว่าไฟล์ใดถูกแจ้งในรายงานข้อผิดพลาดเช่น:

gemspec ไม่ถูกต้องใน [/var/lib/gems/1.8/specifications/svn2git-2.1.2.gemspec]: รูปแบบวันที่ไม่ถูกต้องในข้อกำหนด: "2011-12-28 00: 00: 00.000000000Z"

ในตัวอย่างนี้คุณต้องแก้ไข "/var/lib/gems/1.8/specifications/svn2git-2.1.2.gemspec" file และเปลี่ยน "2011-12-28 00: 00: 00.000000000Z" สำหรับ "2011-12-28" ในตัวเลือก s.date



0

นี่คือสภาพแวดล้อมของฉัน:

RubyGems Environment:
- RUBYGEMS VERSION: 1.8.10
- RUBY VERSION: 1.9.2 (2011-07-09 patchlevel 290) [x86_64-darwin11.1.0]
- INSTALLATION DIRECTORY: /Users/user/.rvm/gems/ruby-1.9.2-p290@app
- RUBY EXECUTABLE: /Users/user/.rvm/rubies/ruby-1.9.2-p290/bin/ruby
- EXECUTABLE DIRECTORY: /Users/user/.rvm/gems/ruby-1.9.2-p290@app/bin
- RUBYGEMS PLATFORMS:
  - ruby
  - x86_64-darwin-11
- GEM PATHS:
   - /Users/user/.rvm/gems/ruby-1.9.2-p290@app
   - /Users/user/.rvm/gems/ruby-1.9.2-p290@global
- GEM CONFIGURATION:
   - :update_sources => true
   - :verbose => true
   - :benchmark => false
   - :backtrace => false
   - :bulk_threshold => 1000
- REMOTE SOURCES:
   - http://rubygems.org/

ในที่สุดฉันก็หาสาเหตุ / วิธีป้องกันข้อผิดพลาดเหล่านี้ในระบบของฉันได้ ฉันเพิ่งเปลี่ยนเป็นแตงกวาและแตงกวารางรุ่น 1.0.2 การใช้เวอร์ชันล่าสุดกำลังทำสิ่งนี้ ...


0

แม้ว่าคุณจะติดตั้งอัญมณีเวอร์ชันล่าสุดด้วยรูปแบบวันที่ที่ถูกต้อง แต่อย่าลืมทำgem cleanup GEMNAMEภายหลังเนื่องจากgemจะยังคงบ่นเกี่ยวกับข้อกำหนดของไลบรารีรุ่นเก่า


0

การติดตั้งอัญมณีของคุณใหม่อาจเป็นวิธีแก้ปัญหาในสถานะเครื่องที่ต่างกันเล็กน้อยเหล่านี้

ในกรณีของฉัน:

cd /Library/Ruby/Gems/1.8/specifications &&
sudo rm -rf *

ในกรณีของฉันโซลูชันที่สร้างสรรค์อื่น ๆ ล้มเหลว

ปัญหาของฉันได้รับInvalid gemspecเมื่อพยายามใช้ cocoapods ฉันวิ่งgem install cocoapodsอีกครั้งและทุกอย่างก็มีเลือดฝาด

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.