Gemspec tidak valid karena format tanggal dalam spesifikasi

89

Ketika saya menyertakan gem yang saya buat, terima kasih kepada Bundler (versi 1.0.12), di dalam Gemfile dan kemudian saya mencoba untuk membundel atau meraup begitu saja:

$ rake

Saya mendapat pesan kesalahan ini:

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"

Saya menggunakan Mac OS X (10.6.4) terakhir, dengan:

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

dan:

$ 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

Saya benar-benar tidak mengerti bagaimana mengatasi masalah ini. Terima kasih atas ide apapun.

Zag zag ..
sumber
Saya mendapatkan kesalahan ini terus-menerus sekarang !!! Bagaimana Anda memperbaikinya? Dua jawaban sejauh ini tidak membantu ...
Meltemi
Yang disarankan semua orang, adalah file hanya baca. Bagaimana saya bisa mengubahnya?
chhantyal

Jawaban:

143

Berikut cara saya memperbaiki kesalahan "format tanggal tidak valid dalam spesifikasi":

1.) Buka folder spesifikasi yang terletak di:

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

2.) Temukan spesifikasi yang menyebabkan masalah.

3.) Ubah s.date = %q{2011-05-21 00:00:00.000000000Z}kes.date = %q{2011-05-21}

Itu MENANG bagi saya! Semoga berhasil

ben hall
sumber
Berhasil, ini membuat kepalaku masuk!
David Archer
Bekerja untuk saya! Saya menggunakan Windows XP dengan Ruby 1.8 diinstal. Em.websocket-0.3.2.gemspec membuat kesalahan ini bagi saya ketika mencoba menggunakan 'livereload' ( livereload.com ).
program247365
Bekerja untuk saya juga, di linux pada versi kronis 1.6.4
Gepsens
Ini memperbaiki masalah untuk satu permata, tetapi mengikuti permata yang dipasang dapat menyebabkan kesalahan ini lagi.
MickaelFM
2
ini membuatku gila ... apakah aku harus mengubah gemspec dari 50 permata pihak ketiga? mengapa mereka tidak memperbarui spesifikasi permata, setahun telah berlalu ..
oma
60

Berikut adalah perintah untuk memperbaikinya untuk semua permata Anda:

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

Itu mengkonversi s.date = %q{2011-05-21 00:00:00.000000000Z}ke s.date = %q{2011-05-21}dan harus memperbaiki masalah Anda.

Philippe Creux
sumber
Trik yang bagus untuk membuat cadangan cepat sebelum melakukan ini:git init . && git commit -am "backup
troyt
Mengapa mencoba mengubah format tanggal, dikatakan saya tidak memiliki izin untuk melakukannya. Apa yang harus dilakukan?
chhantyal
@chhantyal Anda harus menjalankannya sebagai sudo. Terima kasih banyak untuk ini! Sangat menghemat waktu saya.
Matt McClure
21

Mohon perhatikan komentar dari Damian Nowak. Perintah-perintah ini mungkin mengacaukan rubygems Anda!

Di Ubuntu 11.10, yang berikut ini memecahkan kesalahan ini:

sudo gem install rubygems-update
sudo update_rubygems     

Berikut ini mungkin bekerja pada beberapa sistem tetapi tidak pada berbasis Debian:

sudo gem update --system
Menandai
sumber
Bagus, juga berfungsi dengan versi terakhir oneiric. Tetapi ini tampaknya membersihkan semua permata yang dipasang secara manual.
zehrer
1
Jangan gunakan itu. Itu mengacaukan rubygems saya. Saya harus rm -rf banyak barang dan kembali ke rubygems asli dari repo. Instal rubygems sepenuhnya secara manual atau gunakan rubygems yang disediakan oleh Ubuntu. Atau, Anda dapat mencari rubygems saat ini di PPA. (Saya berharap saya dapat membatalkan +1 saya yang dibuat sekitar sebulan yang lalu)
Nowaker
1
@DamianNowak Maaf mendengar ini. Saya menambahkan peringatan ke jawabannya!
Tandai
14

Anda dapat meningkatkan gem. Untuk mengatasinya, Anda dapat mengedit gemspecfile secara langsung - dari

2011-04-21 00:00:00.000000000Z

untuk

YYYY-MM-DD

Atau tingkatkan juga rel Anda

sudo gem update rails

Ini akan memperbaiki masalah.

Sayuj
sumber
@ Meltemi itu akan berada di bawah specificationsdirektori ini adalah specificationsjalur direktori saya -/home/sayuj/.rvm/gems/ruby-1.9.2-p180/specifications/
Sayuj
1 untuk memperbarui rel - itu memperbaiki masalah, meskipun itu melontarkan peringatan yang sama di awal, itu dipasang dengan benar dan masalah tidak lagi terjadi.
Adam Davis
6

Jangan tentukan waktu ... hanya tanggalnya. 2011-04-21harus bekerja dengan baik.

qrush
sumber
Permata :: Spesifikasi.new do | s | s.name = "myplugin" s.version = "1.0.0" s.platform = Permata :: Platform :: RUBY s.authors = ["..."] s.email = ["..."] s .homepage = "http: // ..." s.summary =% q {...} s.description =% q {...} s.rubyforge_project = "myplugin" s.files = .split git ls-files("\ n ") s.test_files = .split git ls-files -- {test,spec,features}/*(" \ n ") s.require_paths = [" lib "] end
Zag zag ..
Terima kasih atas jawaban anda. Saya setuju dengan Anda, tetapi saya tidak menggunakan tanggal atau waktu apa pun di file myplugin.gemspec. Permata itu dibuat secara otomatis oleh Bundler. Saya pikir masalah ini bisa jadi karena Bundler atau RVM ... Ini aneh.
Zag zag ..
4

Punya masalah yang sama. Sepertinya bug di rubygems. Inilah komit yang memperbaikinya: https://github.com/rubygems/rubygems/commit/21cccd55b823848c5e941093a615b0fdd6cd8bc7

Anda perlu memperbarui rubygems dan bundler ke versi terbaru. Jika Anda masih mengalami masalah setelah itu, maka Anda mungkin perlu menghapus dan menginstal ulang permata apa pun yang memberi Anda masalah.

spd
sumber
Nah, kecuali Redmine menggunakan versi Rails 2.3.11-nya sendiri, Rails 2.3.11 gagal dengan RubyGems> = 1.7.0, dan komit yang Anda sebutkan tertanggal 19 Mei 2011, yaitu pasca-1.7.0 (1 April, 2011). Tebak dalam hal ini Anda perlu mengedit file spesifikasi.
Olivier 'Ölbaum' Scherler
3

Ini lebih merupakan komentar untuk jawaban ben hall, tapi sepertinya saya belum memiliki hak istimewa itu

pembaruan permata tampaknya tidak berfungsi, saya pikir itu bahkan tidak dapat memuat permata karena format tanggal yang buruk. mengubah tanggal secara manual terlalu membuat frustrasi untuk pergi satu per satu, jadi grep:

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

Dan untuk sed:

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

Dan risiko Anda sendiri !! Saya masih pemula, tetapi berhasil untuk saya;)

pdelanauze
sumber
2

Di server slicehost saya, folder spesifikasi terletak di tempat yang berbeda. Inilah jalannya:

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

Kesalahan yang diberikan harus memberikan jalur ke folder spesifikasi.

ben hall
sumber
2

Pendekatan senapan: Copot pemasangan semua permata dan jalankan kembali bundler.

  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
Jared Beck
sumber
Jika Anda menggunakan .rvmrcfile, berhati-hatilah menjalankan baris 2 karena gemdir dapat menghasilkan output tambahan.
Jared Beck
1

(Hingga perbaikan bug masuk ke rilis Ruby yang stabil) Saya menyelesaikannya dengan menginstal ulang versi yang sama dari permata yang menghasilkan peringatan menggunakan --version switch dari perintah gem.

Pistos
sumber
1

Seperti yang dikatakan Ben Hall, Anda harus memperbaiki file gemspec yang dapat berubah untuk sistem ke sistem. Untuk mengetahui file apa lihat file apa yang diceritakan dalam laporan kesalahan, contoh:

Gemspec tidak valid di [/var/lib/gems/1.8/specifications/svn2git-2.1.2.gemspec]: format tanggal tidak valid dalam spesifikasi: "2011-12-28 00: 00: 00.000000000Z"

Dalam contoh ini, Anda harus mengedit file "/var/lib/gems/1.8/specifications/svn2git-2.1.2.gemspec" dan mengubah "2011-12-28 00: 00: 00.000000000Z" untuk "2011-12-28" dalam opsi s.date.

PhoneixS
sumber
1

Apakah masalah ini masih ada sekarang. Memperbarui Rubygems menyelesaikannya dengan baik:

gem update --system
polarblau.dll
sumber
0

Ini lingkungan saya:

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/

Saya akhirnya berhasil menemukan penyebab / cara untuk mencegah kesalahan ini di sistem saya. Saya baru saja kembali ke mentimun dan rel mentimun versi 1.0.2. Menggunakan versi terbaru melakukan ini ...

rchampourlier
sumber
0

Bahkan jika Anda menginstal versi terbaru dari sebuah permata dengan format tanggal yang valid, pastikan untuk melakukannya gem cleanup GEMNAMEsetelahnya, karena gemmasih akan mengeluh tentang spesifikasi untuk perpustakaan yang lebih lama.

Daniel Tsadok
sumber
0

Menginstal ulang permata Anda dapat menjadi solusi di banyak status mesin yang sedikit berbeda ini.

Dalam kasus saya:

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

Dalam kasus saya, solusi lain yang lebih kreatif gagal.

Masalah saya muncul Invalid gemspecsaat mencoba menggunakan cocoapods. Saya berlari gem install cocoapodslagi dan semuanya cerah.

james_womack
sumber