Rails rails 数据库迁移到 production 模式时出错

Fighting_3 · 2017年06月02日 · 最后由 Fighting_3 回复于 2017年06月02日 · 1500 次阅读

执行

rails db:migrate RAILS_ENV=production

时,报错,说我数据库连接被拒绝

开发模式当然是这样的。如果不出意外的话是你希望通过serverdomain.com:3000的方式看到你的服务吧。可以考虑将之作为后台服务。比如说 rails server &. 但是这个也不会长久,所以可以使用nohup. 如nohup rails server &.这样可以保证你退出 ssh 后也会一直运行. 关于nohup, 可以看这里https://en.wikipedia.org/wiki/Nohup. 但是你这样并不是好的做法。在 server 端跑 development 模式是没有意义的。

suffering 回复

首先谢谢大大帮助我。我刚才想把数据库信息移植到 production 模式下,但是老是报错,说我数据库连接失败,具体信息如下:

[root@localhost shop]# rails db:migrate RAILS_ENV=production --trace          
** Invoke db:migrate (first_time)          
** Invoke environment (first_time)
** Execute environment
** Invoke db:load_config (first_time)
** Execute db:load_config
** Execute db:migrate
rails aborted!
Mysql2::Error: Access denied for user ''@'localhost' to database 'shop_production'

但是我开发模式下是能够连接数据库的啊,不明白了

数据库报错要看看 database.yml 有没有正确配置用户名密码什么的,本地可以可能是本地的数据库不需要密码

但是看报错,连用户名也没有指定。本地之所以不需要密码。是因为本地用的 sqlite3 吧。

suffering 回复

我先把我的 database.yml 给你看下

default: &default
  adapter: mysql2
  encoding: utf8
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: root
  password: root
  socket: /var/lib/mysql/mysql.sock

development:
  <<: *default
  database: shop_development

production:
  <<: *default
  database: shop_production
  username: shop
  password: <%= ENV['SHOP_DATABASE_PASSWORD'] %>

我就是在本地操作到,没有在 server 端弄。我本地已经修改成 mysql 了,也指定用户名密码了,所以它报这个错我有点看不明白。

lingceng 回复

我都是在本地操作的啊,用户名密码配置了,数据库也指定了。。。

你确定你在 database 里创建 user shop, 并且 grant 了 access permission?

suffering 回复

哦哦,我以为这里 rails 会自行帮我创建用户并且赋权限。。。。是要哇自己创建用户然后赋权限是吗?我去试试。。。

原来是这样😂 好了,谢谢大哥。

suffering 回复

大哥,我已经转换到生产模式了,但是有两个问题想请问一下: 1.

production:
   secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>

这里我把 key 存到环境变量里,再在项目中取,就不行,直接明文写,就 OK,可能时哪里错了?

2.还是之前的老问题,我生产模式也要用 nohup rails s & 命令让一个进程跑服务才能保持服务不关闭吗?常规的做法是怎样的。 (因为我远程连接服务器,直接进项目开启服务,rails s -e production,命令行就锁住了,如果要退出远程连接,就必须要 ctrl+c 停止服务啊。)

在论坛里找一个 capistrano 的帖子了解一下 server deploy 的问题。再去找一个 dotenv 的帖子了解一下 env 配置的问题。

suffering 回复

好,谢谢啊

需要 登录 后方可回复, 如果你还没有账号请 注册新账号