LINUX.ORG.RU

ruby + debian


0

0

Они опять все ломают.

apt-get install rails
apt-get install rubygems
apt-get install libruby
...

=== Cut ===
muf@cocaine:~/studies/studies7/nowe_bazy/zad01/ror/example1$ cat _example.rb
#!/usr/bin/env ruby

require 'rubygems'
require 'active_record'
=== Cut ===

=== Cut ===
muf@cocaine:~/studies/studies7/nowe_bazy/zad01/ror/example1$ ./_example.rb
/usr/lib/ruby/1.8/rubygems/custom_require.rb:27:in `gem_original_require': no such file to load -- active_record (LoadError)
from /usr/lib/ruby/1.8/rubygems/custom_require.rb:27:in `require'
from ./_example.rb:4
=== Cut ===

То есть по мнению разработчиков Дебиана active_record не входит в rails? Как починить да так чтобы при следующем апдейте дебиан опять все не поломал?

Ответ на: комментарий от Teak

Кстати, а ты уверен, что там надо require, а не require_gem или gem? И вообще, полный список установленных пакетов (относящихся к руби) можно посмотреть? А затем список файлов в пакете, относящемся к rails или конкретно ActiveRecord? А то apt-get, а чего оно сказало - не показываешь.

Teak ★★★★★
()
Ответ на: комментарий от Teak

Список пакетов вот:

=== Cut ===
muf@cocaine:~/studies/studies7/nowe_bazy/zad01/ror/example1$ dpkg -l | grep 'ruby\|rails' | awk '{ print $2 }'
libbreakpoint-ruby1.8
libcmdparse2-ruby1.8
libdaemonize-ruby1.8
liberb-ruby
libgems-ruby1.8
liblog4r-ruby1.8
libncurses-ruby1.8
libopenssl-ruby1.8
libpgsql-ruby1.8
libreadline-ruby1.8
libredcloth-ruby1.8
libruby
libruby-extras
libruby1.8
libruby1.8-extras
rails
rake
rdoc
ruby
ruby1.8
rubygems
vim-ruby
=== Cut ===

Надо вроде бы именно require, в примерах так. require 'rubygems' в начале нужно если оно ставилось через gems install вроде, в любом случае не работает ни так ни сяк.

За совет ставить rails не через пакет - спасибо, сейчас попробую.

dissident ★★
() автор топика
Ответ на: комментарий от Teak

А затем список файлов в пакете, относящемся к rails или конкретно ActiveRecord?

В rails полно этого дела:

muf@cocaine:~/studies/studies7/nowe_bazy/zad01/ror/example1$ dpkg -L rails | grep active_record | wc -l
121

Тут вроде есть какое-то решение:
http://madstop.com/articles/tag/sqlite

Но оно ужасно.

dissident ★★
() автор топика
Ответ на: комментарий от dissident

Меня интересует, где active_record лежит, прежде всего. Прямо в lib/ruby или в gems. Если второе - то тебе, как я уже сказал, просто нужен require_gem а не простой require.

Хотя в обычном рельсовом приложении тебе это всё в любом случае нафиг не надо.

Teak ★★★★★
()
Ответ на: комментарий от Teak

Скачал пакетик, посмотрел, что у него внутре. Это какой-то ужос, летящий на крыльях ночи. Короче способа у тебя два:

1. Как я уже сказал, забить не apt-get, как дебиановцы забили на gems.

2. require '/usr/share/rails/activerecord/lib/active_record'

Teak ★★★★★
()
Ответ на: комментарий от Teak

Удалил пакет, поставил через gems, теперь все работает если сделать:

require 'rubygems'
require 'active_record'

require_gem не работает ну и ладно:

muf@cocaine:~/studies/studies7/nowe_bazy/zad01/ror/example1$ ./_example.rb
./_example.rb:3: undefined method `require_gem' for main:Object (NoMethodError)

Насчет того что мне это нафик не нужно я согласен, но это же просто домашнее задание.

Спасибо за решение!

dissident ★★
() автор топика
Ответ на: комментарий от dissident

require_gem считается устаревшей, теперь вроде актуальна функция gem. Но require 'rubygems' всё равно придётся.

Teak ★★★★★
()
Ответ на: комментарий от Teak

Хм:

=== Cut ===
muf@cocaine:~/studies/studies7/nowe_bazy/zad01/ror/example1$ ./_example.rb
/usr/lib/ruby/1.8/rubygems.rb:259:in `report_activate_error': Could not find RubyGem active_record (>= 0.0.0) (Gem::LoadError)
from /usr/lib/ruby/1.8/rubygems.rb:196:in `activate'
from /usr/lib/ruby/1.8/rubygems.rb:65:in `active_gem_with_options'
from /usr/lib/ruby/1.8/rubygems.rb:49:in `gem'
from ./_example.rb:4
=== Cut ===

Это если сказать

require 'rubygems'
gem 'active_record' или require_gem 'active_record'

Если сказать

require 'rubygems'
require 'active_record'

То все хорошо.

Впрочем работает и хорошо.

dissident ★★
() автор топика
Ответ на: комментарий от dissident

Хрен их знает, может и сам пакет rubygems как-то хитро поломан. :) Разбираться, не имея etch по рукой, несподручно, да и действительно - работает и ладно. :)

Teak ★★★★★
()

Забей не мантайнеров дебиана(и убунтовцев тоже)

Ставь apt-get install ruby,ruby-dev,rdoc

gem скачай и установи сам(это легко).

И дальше с помощью gem ставь рельсы.

Motiv_studenta ★★
()
Ответ на: комментарий от Teak

gem нужен только для задания опций require.
irb(main):001:0> require 'rubygems'
=> true
irb(main):002:0> gem 'activerecord'
=> true
irb(main):003:0> ActiveRecord::Base::establish_connection
NameError: uninitialized constant ActiveRecord
from (irb):3
irb(main):004:0> gem 'activerecord', '>1.15'
=> false
irb(main):005:0> gem 'activerecord', '=1.15'
Gem::LoadError: RubyGem version error: activerecord(1.15.2 not = 1.15)

from /usr/lib/ruby/site_ruby/1.8/rubygems.rb:251:in `report_activate_error'
from /usr/lib/ruby/site_ruby/1.8/rubygems.rb:188:in `activate'
from /usr/lib/ruby/site_ruby/1.8/rubygems.rb:66:in `active_gem_with_options'
from /usr/lib/ruby/site_ruby/1.8/rubygems.rb:50:in `gem'
from (irb):5
irb(main):006:0> gem 'activerecord', '=1.15.2'
=> true
irb(main):008:0> require 'active_record'
=> true

Хотя то, что gem нужно говорить 'activerecord' (т.е. название gem), а require - active_record(т.е. название файла) - неудобно. когда забываешь, сииильно достает.

romka
()
Ответ на: комментарий от romka

да, кстати. require_gem тоже берет в качестве опции имя gem, а не имя файла. Так что здесь правильно require_gem 'activerecord'
"А ты говоришь павлины" (с)
))

romka
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.