J'avais l'habitude de mettre des variables globales dans environment.rb avec mon application Rails 2.3.8 telles que:
MAX_ALLOWD_ITEMS = 6
Cela ne semble pas fonctionner dans Rails 3. J'ai essayé de le mettre dans application.rb et cela n'a pas aidé.
Que suggérez-vous?
Si vous avez déjà essayé de redémarrer votre serveur comme suggéré par Ryan, essayez de le mettre dans votre application.rb
comme ceci:
module MyAppName
class Application < Rails::Application
YOUR_GLOBAL_VAR = "test"
end
end
Ensuite, vous pouvez l'appeler avec l'espace de noms dans vos contrôleurs, vues ou ailleurs.
MyAppName::Application::YOUR_GLOBAL_VAR
Une autre alternative consisterait à utiliser quelque chose comme settingslogic . Avec settingslogic, vous créez simplement un fichier de configuration yml et un modèle (Settings.rb) qui pointe vers le fichier de configuration. Ensuite, vous pouvez accéder à ces paramètres n'importe où dans votre application Rails avec:
Settings.my_setting
Je vais généralement avec application_helper.rb Voici à quoi ça ressemble:
module ApplicationHelper
def my_global_variable
my_global_variable = "Helloworld!"
end
end
Ensuite, je peux mettre my_global_variable n'importe où en tant que fonction.
Si vous le définissez vraiment dans config/environment.rb comme vous le dites, le seul moyen de dupliquer votre problème consiste à exécuter un serveur à l'aide de Rails server
, then en mettant la variable dans config /environment.rb, en le référençant quelque part dans une vue ou un contrôleur, puis en essayant de charger cette partie spécifique de mon application.
Si j'arrête le serveur et le redémarre encore et encore, j'essaie d'accéder à cette vue ou à ce contrôleur, alors cela fonctionne. Je pense que vous n'avez tout simplement pas redémarré votre serveur.
Je crée normalement dans config/initializers/un fichier yaml (yml) avec tous les paramètres de site globaux. N'oubliez pas de redémarrer le serveur chaque fois que vous modifiez quelque chose.
Je ne sais pas si la solution consistant à ajouter des variables à environment.rb fonctionnerait réellement dans Rails3 - pour être spécifique, si vous n'avez pas défini la variable dans une définition de module comme ceci:
module MyConfig
Max_ints = 5
end
vous ne pourrez pas simplement utiliser Max_ints, si vous l'incluez simplement en tant que définition simple. Ou du moins c'est ce que j'ai trouvé arrivé lorsque j'ai expérimenté cela. Je pense aussi que la suggestion d'utiliser le dossier initializers/est probablement une meilleure solution en termes de facilité d'utilisation. Voir Variable permanente en Rails