Pepino e WebRat no modo Selenium:Não é possível iniciar o mongrel_rails ao usar o gem bundle

StackOverflow https://stackoverflow.com/questions/2360683

Pergunta

Estou usando gem bundler (v.0.9.6) e Rails 2.3.5, rubygems 1.3.6 e ruby ​​1.8.7 (no Snow Leopard).Meu Gemfile está assim:

source :rubyforge
source "http://gems.github.com"

gem "rails", "2.3.5"
gem "ruby-debug"
gem "activemerchant", :require => 'active_merchant'
gem "hpricot"
gem "nokogiri"
gem "state_machine"
gem "fastercsv"
gem "yubikey"
gem "httparty"
gem "ruby-openid"
gem "mongrel" 

group :development do 
  gem 'mongrel'
end

#teste
group :test do
  gem 'rspec'  
  gem 'rspec-rails'
  gem 'cucumber' 
  gem 'cucumber-rails'
  gem "mechanize"
  gem 'notahat-machinist', :require => 'machinist'
  gem 'faker'
  gem 'webrat'
  gem 'selenium-client'
  gem 'database_cleaner'
  gem 'fakeweb'
  gem 'mongrel' #Selenium needs this
end

Até agora tudo bem.Já estou usando o bundler com sucesso há algumas semanas.Porém, comecei a usar Cucumber e WebRat no modo Selenium para testar alguns recursos ajaxy do site, e sempre que eu estava executando o recurso, o WebRat me dizia que o servidor Rails estava iniciado, mas sempre recebia um XHR_ERROR, onde o Selenium poderia não encontrei o URL. Bem, aconteceu que o servidor não estava sendo iniciado.

Em seguida, abri o arquivo webrat/lib/webrat/selenium/application_servers/rails.rb e coloquei uma instrução de depurador no método start.Executei o recurso novamente, quando o depurador foi acionado, imprimi o retorno do start_command def, que foi:

mongrel_rails start -d --chdir='/Users/fullofcaffeine/Projetos/myproject' --port=3001 --environment=test --pid /Users/fullofcaffeine/Projetos/myproject/tmp/pids/mongrel_selenium.pid 

Copiei e colei no console, removi o -d e & do final, e aqui está a saída que obtive:

** Rails loaded.
** Loading any Rails specific GemPlugins
/Library/Ruby/Gems/1.8/gems/activesupport-2.3.5/lib/active_support/dependencies.rb:156:in `require': no such file to load -- /Users/fullofcaffeine/.bundle/ruby/1.8/gems/mongrel-1.1.5/lib/mongrel/init.rb (MissingSourceFile)
 from /Library/Ruby/Gems/1.8/gems/activesupport-2.3.5/lib/active_support/dependencies.rb:156:in `require'
 from /Library/Ruby/Gems/1.8/gems/activesupport-2.3.5/lib/active_support/dependencies.rb:521:in `new_constants_in'
 from /Library/Ruby/Gems/1.8/gems/activesupport-2.3.5/lib/active_support/dependencies.rb:156:in `require'
 from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8/gems/gem_plugin-0.2.3/lib/gem_plugin.rb:134:in `load'
 from /Library/Ruby/Site/1.8/rubygems/source_index.rb:241:in `each'
 from /Library/Ruby/Site/1.8/rubygems/source_index.rb:241:in `each'
 from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8/gems/gem_plugin-0.2.3/lib/gem_plugin.rb:112:in `load'
 from /Library/Ruby/Gems/1.8/gems/mongrel-1.1.5/bin/../lib/mongrel/configurator.rb:231:in `load_plugins'
 from /Library/Ruby/Gems/1.8/gems/mongrel-1.1.5/bin/mongrel_rails:117:in `cloaker_'
 from /Library/Ruby/Gems/1.8/gems/mongrel-1.1.5/bin/../lib/mongrel/configurator.rb:149:in `call'
 from /Library/Ruby/Gems/1.8/gems/mongrel-1.1.5/bin/../lib/mongrel/configurator.rb:149:in `listener'
 from /Library/Ruby/Gems/1.8/gems/mongrel-1.1.5/bin/mongrel_rails:99:in `cloaker_'
 from /Library/Ruby/Gems/1.8/gems/mongrel-1.1.5/bin/../lib/mongrel/configurator.rb:50:in `call'
 from /Library/Ruby/Gems/1.8/gems/mongrel-1.1.5/bin/../lib/mongrel/configurator.rb:50:in `initialize'
 from /Library/Ruby/Gems/1.8/gems/mongrel-1.1.5/bin/mongrel_rails:84:in `new'
 from /Library/Ruby/Gems/1.8/gems/mongrel-1.1.5/bin/mongrel_rails:84:in `run'
 from /Library/Ruby/Gems/1.8/gems/mongrel-1.1.5/bin/../lib/mongrel/command.rb:212:in `run'
 from /Library/Ruby/Gems/1.8/gems/mongrel-1.1.5/bin/mongrel_rails:281
 from /usr/bin/mongrel_rails:19:in `load'
 from /usr/bin/mongrel_rails:19

Verifique o caminho de onde ele está tentando carregar o mongrel:"~/.bundle/...", mas o mongrel é instalado como uma gema do sistema.O pacote lida bem com o carregamento de gemas do sistema em outro contexto, mas neste caso específico, não tenho ideia de por que está falhando :(.

Tentei executar o "bundle install" novamente e sempre diz:

Instalando o MonGrel (1.1.5) a partir de gemas do sistema

Eu tentei desinstalar o mongrel do sistema para tente fazer o pacote para instalá-lo em ~/.bundle (como esta parece ser a origem do erro, já que o mongrel está sendo pesquisado neste caminho eu inicio o mongrel_rails como acima), mas eu simplesmente não consegui.

gem uninstall mongrel
ERROR:  While executing gem ... (Gem::InstallError)
    cannot uninstall, check `gem list -d mongrel`

E quando executo "gem list | grep mongrel", recebo:

mongrel (1.1.5)

Esquisito.

Eu só quero ser capaz de executar Cucumber e WebRat + Selenium com sucesso enquanto uso o gem bundler, mas isso está me deixando maluco.

Alguém poderia me esclarecer?

Foi útil?

Solução

Bem, encontrei uma solução alternativa, meio suspeita, mas funciona:

 cp  /Library/Ruby/Gems/1.8/gems/mongrel-1.1.5/ mongrel-1.1.5

Agora, se você tentar:

mongrel_rails start --chdir='/Users/fullofcaffeine/Projetos/myproject' --port=3001 --environment=test --pid /Users/fullofcaffeine/Projetos/myproject/tmp/pids/mongrel_selenium.pid

Ele encontrará o mongrel e iniciará o servidor, você poderá então executar o recurso Cucumber que usa Selenium e funcionará :)

Se alguém descobrir ou souber de mais alguma coisa sobre esse problema, compartilhe, isso pode acabar sendo um bug em algum lugar.

Outras dicas

Eu tive um problema semelhante, mas acabou sendo versões incompatíveis de gemas entre o que estava no meu /users/ {account {. /opt/local/liby/ruby/gems/(as portas Mac instalam). Assim que eu excluí o /Users/ {Account }/.GEMS/, tudo funcionou.

Encontrei o mesmo problema e passei um tempo tentando depurar. Parece que existe algum tipo de interação entre Mongol, Gemplugin e Bundler. As soluções possíveis incluem:

  1. Fixar gemplugin para jogar bem com o Bundler 0.9.
  2. Modifique o MONGREL para não usar mais Gemplugin.
  3. Modifique o Webrat para suportar um servidor da Web que não seja o MonGrel.

Como Gemplugin e Mongrel estão parecendo um tanto obsoletos e abandonados hoje em dia, decidi adicionar um apoio fino ao Webrat com base em este patch.

Você pode Encontre o novo patch no Github, ou adicione o seguinte ao seu GemFile:

gem 'webrat', :git => 'git://github.com/emk/webrat.git'

... e atualize seus recursos/suporte/env.rb arquivo de acordo:

Webrat.configure do |config|
  # Add this line.
  config.application_framework = :rails_thin

  # Your previous configuration here...
end

bundle exec mongrel_rails start ... ?

O ponto aqui é carregar as jóias Rails do pacote também não do sistema Gemenv.

Temos um cenário semelhante que foi escrito aqui:Como fazer Mongrel trabalhando com Bundler?

Tente localizar o diretório GEMS que o executável atual do GEM está usando e exclua qualquer resíduo de diretórios de cache ou especificações, que devem funcionar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top