2015-11-12 1 views
2

Je suis relativement novice dans le domaine des rails et je suis en train de me battre pour essayer d'obtenir une application Rails sur mon serveur. Localement sur mon Mac, tout fonctionne correctement, cependant quand je l'exécute sur le serveur Ubuntu, j'obtiens une erreur NameError (uninitialized constant Api::V1::TestController::Headless). J'ai mis à jour bundler et les gemmes pertinentes comme cela a été suggéré dans d'autres messages. Je suis certain que Headless est dans mon fichier gem, est à jour, et est installé correctement. J'utilise Headless avec Watir Webdriver. Toute suggestion sur ce qui pourrait causer cette erreur serait grandement appréciée.Constante non initialisée dans Rails from Gem

Ruby Version: 2.2.3

Le contrôleur en question:

class Api::V1::TestController < ApplicationController 
    respond_to :json 

    def index 
    respond_with "test controller" 
    end 

    def create 

    event_submit(params[:json_event]) 

    respond_to do |format| 
     if (@log.present?) 
     format.json { render text: "Log: " + @log } 
     else 
     format.json { render text: "Error, no log" } 
     end 
    end 

    end 

    def nul_check(param) 
    param ||= "none" 
    return param 
    end 


    def event_submit(params) 

    @log = "" 

    #initialize the log 
    @log = "" 
    #set the browser that we will use to chrome for testing 
    #use headless 
    headless = Headless.new 
    headless.start 

    browser = Watir::browser.start 'www.google.com' 

    @log += browser.title 

    end 

end 

Le Gemfile:

source 'https://rubygems.org' 


# Bundle edge Rails instead: gem 'rails', github: 'rails/rails' 
gem 'rails', '4.2.4' 
# Use postgresql as the database for Active Record 
gem 'pg' 
# Use SCSS for stylesheets 
gem 'sass-rails', '~> 5.0' 
# Use Uglifier as compressor for JavaScript assets 
gem 'uglifier', '>= 1.3.0' 
# Use CoffeeScript for .coffee assets and views 
gem 'coffee-rails', '~> 4.1.0' 

# Use jquery as the JavaScript library 
gem 'jquery-rails' 
# Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks 
gem 'turbolinks' 
# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder 
gem 'jbuilder', '~> 2.0' 
# bundle exec rake doc:rails generates the API under doc/api. 
gem 'sdoc', '~> 0.4.0', group: :doc 

#Api gems 
gem 'active_model_serializers' 
gem 'deathbycaptcha' 
gem 'rspec' 
gem 'responders', '~> 2.0' 


#Driver gems 
gem 'watir-extensions-element-screenshot' 
gem 'selenium-webdriver' 
gem 'chromedriver-helper' 
gem 'headless' 
gem 'nokogiri' 
gem 'watir-webdriver' 

group :development, :test do 
    gem 'sqlite3' 
    # Call 'byebug' anywhere in the code to stop execution and get a debugger console 
    gem 'byebug' 
end 

group :development do 
    # Access an IRB console on exception pages or by using <%= console %> in views 
    gem 'web-console', '~> 2.0' 

    # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring 
    gem 'spring' 
end 


gem 'unicorn' 
+1

Si au lieu de 'Headless' vous mettez' :: Headless' (notez le double deux-points), ça marche? – AmitA

+1

Est-ce que mettre 'require' headless'' en haut du contrôleur aide? –

+0

en utilisant :: Headless n'a aucun effet perceptible. J'ai la même erreur. L'ajout de 'require 'sans tête au sommet du contrôleur provoque un timeout de la passerelle. Cela n'ajoute rien au journal des erreurs, et cela n'a aucun effet quand je le fais au niveau local. Je coupe avec Unicorn/Nginx – Paige

Répondre

0

Le problème s'est avéré être la propriété du serveur. L'utilisateur, rails dans mon cas, n'avait pas la propriété des gemmes puisque j'avais couru bundle install sous mon propre compte. Un chmod pour l'utilisateur des rails s'est occupé du problème!

1

Le problème est que Rails recherche la constante Headless sous l'espace de noms Api::V1::TestController .

Vous devez utiliser ::Headless (sorte de chemin absolu vers la constante).

+0

Je pense que Ruby devrait résoudre la constante de haut niveau 'Headless' depuis' Api :: V1 :: TestController'. Il y a peut-être des différences de comportement entre les différentes implémentations de Ruby dont je ne suis pas conscient. Généralement, le préfixe d'une constante est nécessaire uniquement lorsque le nom de la constante donnée apparaît dans plusieurs espaces de noms et ne se résout pas à l'instance souhaitée à partir du contexte actuel. –