web-dev-qa-db-fra.com

Rails console en production: NameError: constante non initialisée

J'ai une application Rails (Rails 5). En développement, tout fonctionne, quand j'utilise

Rails console

Et entrez une instruction, par exemple User.all , ça marche.

En production, mon application fonctionne parfaitement, pas de problème, pas d'erreur, mais quand j'utilise Rails console production et entrez par exemple User.all j'ai une erreur:

NameError: uninitialized constant User
    from (irb):2
    from /home/alexandre/.rbenv/versions/2.3.1/lib/Ruby/gems/2.3.0/gems/railties-5.0.0.1/lib/Rails/commands/console.rb:65:in `start'
    from /home/alexandre/.rbenv/versions/2.3.1/lib/Ruby/gems/2.3.0/gems/railties-5.0.0.1/lib/Rails/commands/console_helper.rb:9:in `start'
    from /home/alexandre/.rbenv/versions/2.3.1/lib/Ruby/gems/2.3.0/gems/railties-5.0.0.1/lib/Rails/commands/commands_tasks.rb:78:in `console'
    from /home/alexandre/.rbenv/versions/2.3.1/lib/Ruby/gems/2.3.0/gems/railties-5.0.0.1/lib/Rails/commands/commands_tasks.rb:49:in `run_command!'
    from /home/alexandre/.rbenv/versions/2.3.1/lib/Ruby/gems/2.3.0/gems/railties-5.0.0.1/lib/Rails/commands.rb:18:in `<top (required)>'
    from /home/alexandre/.rbenv/versions/2.3.1/lib/Ruby/gems/2.3.0/gems/activesupport-5.0.0.1/lib/active_support/dependencies.rb:293:in `require'
    from /home/alexandre/.rbenv/versions/2.3.1/lib/Ruby/gems/2.3.0/gems/activesupport-5.0.0.1/lib/active_support/dependencies.rb:293:in `block in require'
    from /home/alexandre/.rbenv/versions/2.3.1/lib/Ruby/gems/2.3.0/gems/activesupport-5.0.0.1/lib/active_support/dependencies.rb:259:in `load_dependency'
    from /home/alexandre/.rbenv/versions/2.3.1/lib/Ruby/gems/2.3.0/gems/activesupport-5.0.0.1/lib/active_support/dependencies.rb:293:in `require'
    from /home/alexandre/tcheen/bin/Rails:9:in `<top (required)>'
    from /home/alexandre/.rbenv/versions/2.3.1/lib/Ruby/gems/2.3.0/gems/spring-1.7.2/lib/spring/commands/Rails.rb:6:in `load'
    from /home/alexandre/.rbenv/versions/2.3.1/lib/Ruby/gems/2.3.0/gems/spring-1.7.2/lib/spring/commands/Rails.rb:6:in `call'
    from /home/alexandre/.rbenv/versions/2.3.1/lib/Ruby/gems/2.3.0/gems/spring-1.7.2/lib/spring/command_wrapper.rb:38:in `call'
    from /home/alexandre/.rbenv/versions/2.3.1/lib/Ruby/gems/2.3.0/gems/spring-1.7.2/lib/spring/application.rb:191:in `block in serve'
    from /home/alexandre/.rbenv/versions/2.3.1/lib/Ruby/gems/2.3.0/gems/spring-1.7.2/lib/spring/application.rb:161:in `fork'
    from /home/alexandre/.rbenv/versions/2.3.1/lib/Ruby/gems/2.3.0/gems/spring-1.7.2/lib/spring/application.rb:161:in `serve'
    from /home/alexandre/.rbenv/versions/2.3.1/lib/Ruby/gems/2.3.0/gems/spring-1.7.2/lib/spring/application.rb:131:in `block in run'
    from /home/alexandre/.rbenv/versions/2.3.1/lib/Ruby/gems/2.3.0/gems/spring-1.7.2/lib/spring/application.rb:125:in `loop'
    from /home/alexandre/.rbenv/versions/2.3.1/lib/Ruby/gems/2.3.0/gems/spring-1.7.2/lib/spring/application.rb:125:in `run'
    from /home/alexandre/.rbenv/versions/2.3.1/lib/Ruby/gems/2.3.0/gems/spring-1.7.2/lib/spring/application/boot.rb:19:in `<top (required)>'
    from /home/alexandre/.rbenv/versions/2.3.1/lib/Ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from /home/alexandre/.rbenv/versions/2.3.1/lib/Ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from -e:1:in `<main>'

J'ai le même problème avec toutes mes classes, mais je le répète, l'application fonctionne parfaitement. Je développe sur Mac OS et l'application fonctionne en production sur Debian 8. Mes modèles sont correctement nommés et vérifiés. Merci

27
Alexandre

J'ai eu ce problème et j'ai réalisé qu'il s'était produit après avoir fait un Tweak à l'un de mes fichiers de travail. Ce qui l'a corrigé, c'était le redémarrage du chargeur à ressort. Il suffit de courir

spring stop

Ensuite, la prochaine fois que vous exécutez le Rails console il devrait charger les choses normalement.

84
rewolf

J'ai eu ce même problème, réponse de rewolf ci-dessus l'a résolu pour moi temporairement .

Juste pour ajouter à sa réponse:

Après avoir arrêté la gemme spring en exécutant la commande ci-dessous

spring stop

Vous pouvez également résoudre ce problème de façon permanente en augmentant (en supprimant la gemme de printemps) votre bin/ exécutables:

bin/spring binstub --remove --all

Ou

spring binstub --remove --all

Vous pouvez maintenant exécuter la commande ci-dessous pour entrer dans la console Rails en production

Rails c --environment=production

De plus, pour éviter que cela ne se produise dans les occasions suivantes, essayez de vous assurer que la gemme spring n'est présente que dans les groupes development et test de votre Gemfile.

De plus, lorsque vous êtes en production, assurez-vous de toujours fournir le --without development test argument à bundle install commande

bundle install --without development test

et pas l'habituel ou commun

bundle install

Veuillez noter: À titre indicatif, chaque fois que vous exécutez la commande Rails c ou Rails console et vous voyez la sortie ci-dessous:

Exécution via le préchargeur Spring en cours 26651 AVERTISSEMENT: Spring est en cours de production. Pour résoudre ce problème, assurez-vous que la gemme de printemps est uniquement présente dans les groupes development et test dans votre Gemfile et assurez-vous de toujours utiliser bundle install --without development test en production

C'est une indication que la gemme spring est en cours d'exécution dans votre environnement de production, et qu'elle doit être arrêtée ou supprimée entièrement de vos exécutables bin.

C'est tout.

J'espère que cela vous aidera

0
Promise Preston