在rails项目中,config/initializers/publish_name.rb文件常用来定义的全局变量、全局常量。但是我们虽然在publish_name.rb文件中定义了常量,但是还是显示没有定义。来看一下解决方法。

问题描述:

在publish_name.rb文件中定义了变量DB_CLASS

DB_CLASS = {}

运行项目的时候报错

NameError: uninitialized constant DB_CLASS
问题查看:

先进入控制台,看看常量是否被正确定义了

#输入rails c进入控制台
xuzhaoning@xuchaoningdeMacBook-Air:~/private_data$ rails c
#输入DB_CLASS返回{},说明已经被定义了
[1] pry(main)> DB_CLASS
=> {}

如果控制台中,显示该变量已经被定义,那么我们需要重启项目,如果控制台中就报错​​NameError: uninitialized constant DB_CLASS​​那么应该检查一下你的publish_name.rb文件中这个变量是否被正确定义

问题解决:

控制台中显示该变量被定义了,但是运行项目时还是报错,那就应该重启一下项目。先看一下项目是用puma启动的还是unicorn启动的,然后对应杀死进程,重启项目。

1、如果项目直接rails s启动的,那么ctrl + c停止项目,rails s启动项目就可以实现重启。
2、项目是puma启动的(默认)
#查找puma进程
/vagrant/data_system$ ps -axu | grep puma
#系统返回两条信息,第一条是项目的puma进程,第二条是你当前查找动作的进程。
vagrant 2088 50.8 3.7 764332 76048 pts/0 Tl 02:35 0:03 puma 3.12.0 (tcp://0.0.0.0:3000) [data_system]
vagrant 2136 0.0 0.0 10468 916 pts/0 S+ 02:35 0:00 grep --color=auto puma

#杀死puma进程
/vagrant/data_system$ kill -9 2088

#启动puma,注意ip地址换成自己项目的ip,-e后面的环境换成你的启动环境
puma -b tcp://192.168.1.233:8882 -e production -d
3、项目是unicorn启动的
#查找unicorn进程
/vagrant/data_system$ ps -axu | grep unicorn
#系统返回两条信息,第一条是项目的unicorn进程,第二条是你当前查找动作的进程。
1001 5475 0.0 0.3 370856 102656 ? Sl Jan23 0:04 unicorn_rails master -c ./config/unicorn.rb -D
1001 29178 0.0 0.0 17980 936 pts/5 R+ 10:46 0:00 grep unicorn

#杀死unicorn进程
/vagrant/data_system$ kill -9 5475

#启动unicorn
bundle exec unicorn_rails -c ./config/unicorn.rb -D

现在再运行项目,已经不报错了。