Ketika saya ingin membuat proyek Ruby on Rails, saya mendapatkan pesan di bawah ini.
/usr/lib/ruby/gems/1.8/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:55: uninitialized constant ActiveSupport::Dependencies::Mutex (NameError)
from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:36:in `gem_original_require'
from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:36:in `require'
from /usr/lib/ruby/gems/1.8/gems/activesupport-2.3.8/lib/active_support.rb:57
from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:36:in `gem_original_require'
from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:36:in `require'
from /usr/lib/ruby/gems/1.8/gems/rails-2.3.8/lib/rails_generator.rb:31
from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:36:in `gem_original_require'
from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:36:in `require'
from /usr/lib/ruby/gems/1.8/gems/rails-2.3.8/bin/rails:15
from /usr/bin/rails:19:in `load'
from /usr/bin/rails:19
Apa yang salah? Bagaimana cara memperbaikinya?
ruby-on-rails
rubygems
compatibility
Sokmesa Khiev
sumber
sumber
gem --version
?Jawaban:
Ini adalah ketidakcocokan antara Rails 2.3.8 dan versi terbaru dari RubyGems. Tingkatkan ke versi 2.3 terbaru (2.3.11 pada hari ini).
sumber
Jika Anda tidak dapat meningkatkan ke Ruby on Rails 2.3.11 (dan untuk memperluas jawaban douglasr),
thread
harus diminta di bagian atasboot.rb
. Sebagai contoh:sumber
boot.rb
itu sendiri.<RUBYDIR>/lib/ruby/gems/<VERSION>/gems/rails-<VERSION>/environments/boot.rb
Saya dapat memperbaiki ini dengan menurunkan RubyGems ke 1.5.3, karena itu terjadi dengan RubyGems 1.6.0+ dan Rails <2.3.11:
Jika sebelumnya Anda telah menurunkan versi ke versi yang lebih awal dan ingin memperbarui ke 1.5.3, Anda mungkin mendapatkan yang berikut ketika mencoba menjalankannya:
Jika Anda mendapatkan kesalahan itu, maka perbarui, sehingga memungkinkan Anda menentukan versi, dan kemudian turunkan lagi:
sumber
undefined local variable or method version_requirements for #<Rails::GemDependency:0x2b001603fe30>
Anda juga dapat mengatasi masalah ini dengan meminta 'utas' di aplikasi Anda seperti:
Sesuai dengan catatan rilis RubyGems 1.6.0 .
sumber
Jika Anda ingin menjaga versi Anda sama seperti rel akan 2.3.8 dan versi permata akan terbaru. Anda dapat menggunakan solusi ini Permata terbaru dengan Rails2.x . dalam hal ini beberapa perubahan pada file boot.rb dan file environment.rb.
require 'thread
'di file boot.rb di bagian atas.dan di file environment.rb tambahkan kode berikut di atas blok initializer.
sumber
Saya telah menghadapi masalah ini di banyak kesempatan ketika saya mencoba untuk memulai proyek rel 2.3.5 lama setelah bekerja dengan rel 3>. Dalam kasus saya untuk menyelesaikan masalah, saya harus melakukan pembaruan rubygems ke versi 1.4.2, ini adalah:
sumber
Jika Anda menggunakan Radiant CMS, cukup tambahkan
ke atas
config/boot.rb
.(Kudos untuk tanggapan Harun dan nathanvda.)
sumber
Seperti yang disebutkan ini terjadi ketika menggunakan RubyGems 1.6.0 dengan Ruby on Rails versi lebih awal dari versi 3. Aplikasi saya menggunakan Ruby on Rails 2.3.3 dibatalkan ke / vendor proyek.
Tidak diragukan lagi peningkatan Ruby on Rails ke versi 2.3.X yang lebih baru juga dapat memperbaiki masalah ini. Namun, masalah ini mencegah Anda menjalankan Rake untuk membatalkan Ruby on Rails dan memutakhirkannya.
Menambahkan memerlukan 'utas' ke atas environment.rb tidak memperbaiki masalah bagi saya. Menambahkan membutuhkan 'utas' ke /vendor/rails/activesupport/lib/active_support.rb memang memperbaiki masalah.
sumber
Coba perbarui versi Ruby on Rails Anda ke v3.0.5:
atau v2.3.11:
Jika ini bukan proyek baru Anda harus memutakhirkan aplikasi Anda. Jika itu adalah proyek baru, hapus saja direktori tempat Anda membuatnya dan buat proyek baru lagi.
sumber
perbarui rubygems
pembaruan permata --sistem
sumber
Saya memposting solusi saya untuk jiwa-jiwa yang kurang tidur di luar sana:
Jika Anda menggunakan RVM, periksa kembali apakah Anda berada di folder yang benar, menggunakan versi ruby dan permata yang benar. Saya memiliki array tab terminal terbuka, dan salah satunya ada di direktori yang berbeda. mengetikkan "rails console" menghasilkan kesalahan karena distro rail default saya adalah 2.3.x.
Saya melihat kesalahan pada bagian saya, cd ke direktori yang benar, dan file .rvmrc saya melakukan sisanya.
RVM tidak seperti Git. Dalam git, mengubah cabang dalam satu shell akan mengubahnya di mana-mana. Secara harfiah menulis ulang file yang dimaksud. RVM, di sisi lain, hanya mengatur variabel shell, dan harus ditetapkan untuk setiap shell baru yang Anda buka.
Jika Anda tidak terbiasa dengan .rvmrc, Anda dapat meletakkan file dengan nama itu di direktori mana pun, dan rvm akan mengambilnya dan menggunakan versi / gemset yang ditentukan di dalamnya, setiap kali Anda mengubah ke direktori itu. Berikut ini contoh file .rvmrc:
Ini akan beralih ke ruby 1.9.2 versi terbaru dalam koleksi RVM Anda, menggunakan "turtles" permata. Sekarang Anda dapat membuka seratus tab di Terminal (seperti yang saya lakukan pada akhirnya) dan tidak pernah khawatir tentang versi ruby yang ditunjuknya.
sumber