web-dev-qa-db-fra.com

Installation de la dernière version de Rails 4 avec Postgres - Les constantes PGconn, PGresult et PGError sont obsolètes

Je ne parviens pas à trouver cet avertissement sur Google, alors je demande l'aide de Stackowerflower.

Je souhaite installer Rails 4.2.8 sur une nouvelle boîte Centos 7. La version de Postgres est la version 9.2.18 . La version de Ruby est la version 2.3.4.

Lorsque Rails est installé, je configure le fichier config/database.yml comme d'habitude et je suis presque sûr que le fichier database.yml permet la connexion à la base de données avec succès. Postgres est déjà en cours d'exécution pour d'autres applications et un nouveau rôle est créé pour cette application.

Dans la prochaine étape, il y a un problème réel:

[user@server dir]$ rake db:setup
The PGconn, PGresult, and PGError constants are deprecated, and will be
removed as of version 1.0.

You should use PG::Connection, PG::Result, and PG::Error instead, respectively.

Called from /home/user/.rbenv/versions/2.3.4/lib/Ruby/gems/2.3.0/gems/activesupport-4.2.8/lib/active_support/dependencies.rb:240:in `load_dependency'
/home/rent/apps/rent/db/schema.rb doesn't exist yet. Run `rake db:migrate` to create it, then try again. If you do not intend to use a database, you should instead alter /home/user/apps/rent/config/application.rb to limit the frameworks that will be loaded.
[user@server dir]$

Est-ce que cela confirme que Rails s'est connecté avec succès à Postgres? Comment vérifier simplement?

Si oui, combien de temps vais-je pouvoir utiliser des versions Postgres similaires avec Rails 4.2.8?

Chose intéressante, je n'ai pas reçu de messages similaires avec une configuration très similaire, donc je voulais être sûr de pouvoir bien utiliser cette configuration.

Merci beaucoup

13
Laimis

J'ai remarqué les mêmes avertissements de dépréciation lors de la mise à niveau de la page 0,20.0 à la page 0,21.0. Je ne semblais pas avoir de problèmes réels avec pg et mes applications (développement, mise en scène et production) semblaient bien fonctionner. 

J'ai trouvé l'avertissement ennuyeux, cependant, alors j'ai verrouillé tous mes Gemfiles à la page 0,20.0.

27
jvillian

Pour éviter d'utiliser une version plus ancienne que 0.21.0 de la gem pg, placez ce fichier dans lib/pg/deprecated_constants.rb et vérifiez que le $LOAD_PATH de votre application est configuré pour charger les fichiers dans le répertoire lib/ de votre application avant le chemin d'installation de votre pg gem. Voir les notes supplémentaires dans les commentaires ci-dessous:

# File: lib/pg/deprecated_constants.rb
#
# This file overrides the pg gem's pg/deprecated_constants.rb file and so
# its warning message is not printed. Avoiding this warning message helps
# clean up the app startup and test output.
#
# This behaviour relies on lib/ being ahead of the pg gem in $LOAD_PATH and
# these lines from the pg gem's lib/pg.rb file:
# autoload :PGError,  'pg/deprecated_constants'
# autoload :PGconn,   'pg/deprecated_constants'
# autoload :PGresult, 'pg/deprecated_constants'
#
# Your config/application.rb may need to modify autoload_paths to ensure
# the lib/ dir is ahead of the pg gem install path in $LOAD_PATH:
#
# config.autoload_paths << Rails.root.join('lib')
#
if ('0.21.0' != PG::VERSION) || (ActiveRecord.version.to_s != '4.2.8')
  puts <<MSG
-----------------------------------------------------------------------------------
The pg and/or activerecord gem version has changed, meaning deprecated pg constants
may no longer be in use, so try deleting this file to see if the
'The PGconn, PGresult, and PGError constants are deprecated...' message has gone:
#{__FILE__}
-----------------------------------------------------------------------------------

MSG
end

# Declare the deprecated constants as is done in the original 
# pg/deprecated_constants.rb so they can still be used by older
# versions of gems such as activerecord.
PGconn   = PG::Connection
PGresult = PG::Result
PGError  = PG::Error
1
Eliot Sykes

Ou si vous voulez utiliser la version la plus récente de pg, vous pouvez patcher les dépréciations gênantes. REMARQUE: ceci écrasera le fichier dans votre ensemble de gemmes:

Créez un fichier dans la racine de votre application (à savoir bin/monkey_patch.rb). Il devrait ressembler à ceci:

#bin/monkey_patch.rb
if pg_path = `bundle show pg --paths`.strip
   pg_deprications = pg_path + '/lib/pg/deprecated_constants.rb'
   nag_string = 'The PGconn, PGresult, and PGError constants are deprecated, and will be
removed as of version 1.0.

You should use PG::Connection, PG::Result, and PG::Error instead, respectively.

Called from #{callsite}'

  str = File.read pg_deprications
  if str.include? nag_string
    File.open(pg_deprications, 'w') {|f| f.puts str.gsub(nag_string, '')}
  end
end

Ensuite, dans votre fichier application.rb, après la première ligne require, ajoutez une 2e ligne comme celle-ci, ce qui corrigera l’amortissement avant le démarrage de l’application.

require File.expand_path('../boot', __FILE__)
system('Ruby ./bin/monkey_patch.rb')

C'est un hack total mais ça marche et vous pouvez utiliser la version la plus récente de Ruby-pg gem. Mais de ce que je peux dire avec un diff git sur v0.21.0 vs v0.20.0, il n’ya pas grand-chose qui a changé de toute façon. Mais je voulais essayer ça et ça a marché :)

0
lacostenycoder