运行Sharetribe Go生产环境时遭遇ActiveRecord::NoDatabaseError问题
核心问题
你执行rake db:create时默认操作的是development环境,而你启动的是production环境,所以sharetribe_production数据库根本没被创建。
分步解决方案
1. 明确指定生产环境创建数据库
执行以下命令,强制针对production环境创建数据库:
RAILS_ENV=production bundle exec rake db:create
如果你的Rails版本较新,也可以用rails命令:
RAILS_ENV=production bundle exec rails db:create
2. 手动验证数据库创建(如果命令执行无效果)
如果上面的命令没反应,直接登录MariaDB手动创建数据库,排除权限或配置问题:
- 登录MariaDB:
mysql -u root -p
- 输入你的密码(
mypass)后,执行创建语句:
CREATE DATABASE sharetribe_production CHARACTER SET utf8;
- 执行
SHOW DATABASES;确认数据库已存在,然后退出:EXIT;
3. 检查数据库用户权限
确保root用户拥有足够操作生产数据库的权限:
- 登录MariaDB后,执行:
GRANT ALL PRIVILEGES ON sharetribe_production.* TO 'root'@'localhost'; FLUSH PRIVILEGES;
4. 验证database.yml配置细节
你的production配置里有几个需要确认的点:
password: "mypass":如果密码没有特殊字符,可以去掉引号,避免解析问题;如果有特殊字符,保留引号即可。- 若MariaDB使用socket连接(而非TCP),可以添加socket路径(根据你的系统调整,常见路径是
/var/run/mysqld/mysqld.sock或/var/lib/mysql/mysql.sock):
production: adapter: mysql2 database: sharetribe_production encoding: utf8 username: root password: mypass host: localhost socket: /var/run/mysqld/mysqld.sock
5. 完成数据库迁移并启动服务
数据库创建成功后,执行生产环境的迁移:
RAILS_ENV=production bundle exec rake db:migrate
然后重新启动服务器:
bundle exec rails server -e production
额外检查
- 确认MariaDB服务正在运行:执行
systemctl status mariadb(Systemd系统)或service mariadb status(SysVinit系统),若未运行则启动服务:systemctl start mariadb。
内容的提问来源于stack exchange,提问作者Mayan
相关产品推荐
相关产品推荐

