ruby mechanize требует полного имени класса

зачем вам полное название для механизации так:

#!/usr/bin/ruby -w

require 'rubygems'
require 'pp'
require 'yaml'
require "mechanize"


yml = YAML.load_file 'login.yml'
user = yml["user"]
pword = yml["pword"]

a = WWW::Mechanize.new { |agent|
  agent.user_agent_alias = 'Mac Safari'
}

a.get('http://google.com/') do |page|
  search_result = page.form_with(:name => 'f') do |search|
    search.q = 'Hello world'
  end.submit

  search_result.links.each do |link|
    puts link.text
  end
end

когда механизированный пример этого не делает? Это задается поверх предыдущего вопроса. Код работал только после прочтения предыдущего вопроса по этой теме и добавления полного имени класса (?). Я кажусь чем-то похожим на Java, но только когда это неоднозначно. Здесь нет ничего двусмысленного, есть только одна Механизация.

Простите, фактический предыдущий вопрос полностью противоречит приведенной выше ссылке. Предыдущий вопрос, на который я ссылался, находится здесь . Повторюсь, два разных вопроса, два разных ответа. Возможно, API или идиома изменились.


person Thufir    schedule 24.01.2012    source источник
comment
Почему вы require 'rubygems' дважды и требуете Net::HTTP и Net::HTTPS? Первый избыточен, а последние два не нужны, если вы используете Mechanize.   -  person the Tin Man    schedule 24.01.2012
comment
о, скопируйте / вставьте, чтобы иметь rubygems дважды. Я исправлю это и удалю сетевой материал.   -  person Thufir    schedule 24.01.2012
comment
исправил требуемый материал, простите. В любом случае, тот же результат, в моей системе по-прежнему требуется полный класс. Вопрос еще актуален. Однако, спасибо.   -  person Thufir    schedule 24.01.2012


Ответы (1)


Какую версию Mechanize вы используете? Попробуйте gem list mechanize.

Используя Ruby 1.8.7-p357, 1.9.2-p290 и 1.9.3-p0, а также Mechanize 2.1, я могу создать экземпляр. Например:

1.8.7 :001 > require 'mechanize'
true
1.8.7 :002 > agent = Mechanize.new
#<Mechanize:0x101baacf0
[...]

и:

1.9.3p0 :001 > require 'mechanize'
true
1.9.3p0 :002 > agent = Mechanize.new
#<Mechanize:0x102988610
[...]

Я подозреваю, что вы используете Mac OS, потому что вы обращаетесь к Ruby по адресу /usr/bin. Ruby не устанавливается по умолчанию в Windows или Linux и обычно не находится по этому пути.

Версия Ruby от Apple не включает Mechanize, поэтому вы добавили его в какой-то момент. Поскольку Apple не устанавливала его, обновление должно быть безопасным, поэтому сделайте следующее:

sudo gem update mechanize

Apple использует Ruby для приложений в Mac OS, поэтому вы должны знать об этом при обновлении их предустановленных драгоценных камней.

person the Tin Man    schedule 24.01.2012
comment
ну, за пределами символа, чтобы дать полную вставку. Однако для меня тот же результат в irb, что и в ruby. По общему признанию, я нахожусь в процессе обновления своей системы, поэтому просто используйте rubygems, чтобы ввести Mechanize. - person Thufir; 24.01.2012
comment
о, я на Ubuntu, но, возможно, это проблема пути, как вы предполагаете. Возможно, это также объясняет предыдущий вопрос. - person Thufir; 24.01.2012
comment
!!!!! УВЕДОМЛЕНИЕ ОБ УСТАРЕНИИ !!!!! Константа WWW устарела, переключитесь на новую константу верхнего уровня Mechanize. WWW будет удален в Mechanize версии 2.0. Вы ссылались на константу WWW из ./bar.rb:14, переключите WWW на Mechanize. Спасибо! С уважением, Пью Пью Пью - person Thufir; 24.01.2012