执行
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 模式是没有意义的。
首先谢谢大大帮助我。我刚才想把数据库信息移植到 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 给你看下
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 了,也指定用户名密码了,所以它报这个错我有点看不明白。
哦哦,我以为这里 rails 会自行帮我创建用户并且赋权限。。。。是要哇自己创建用户然后赋权限是吗?我去试试。。。
原来是这样 好了,谢谢大哥。
大哥,我已经转换到生产模式了,但是有两个问题想请问一下: 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 配置的问题。