gpt4 book ai didi

mysql - 在 Rails Controller 操作中创建 Mysql 用户

转载 作者:太空宇宙 更新时间:2023-11-03 18:21:42 24 4
gpt4 key购买 nike

正在开发一个仅供管理员用来创建另一个应用程序的多个实例的应用程序。

换句话说,app A 将用于在服务器上创建 app B 的克隆,并创建在子域上运行该克隆应用所需的所有配置 new_clone.domain.com.

设法克隆应用程序,创建 apache 配置文件,unicorn 服务器设置 文件。设法运行 rake db:create; db:migrate 但我是用 mysql 的 root 用户完成的。

在克隆应用程序时,我为新克隆的应用程序生成了一个 database.yml 文件,该文件此时具有 usernamepassword 设置为 root,但我希望每个克隆的应用程序都有不同的用户。

应用程序 A 有一个名为 Subdomain 的模型,在 subdomains_controller.rb 中的 create 操作中我做了所有的事情,克隆,生成配置文件、运行 rake 任务等...并且在这个 create 操作中,我需要创建一个新的 Mysql 用户,该用户具有特定数据库的权限。

到目前为止我尝试了什么,不能说我做了很多,我尝试在 Controller 创建操作中运行 mysql 命令:

def create
if @subdomain.save
....
system "mysql -u root -p root; create database new_database;..."
....
else
....
end
end

但这会暂停我的创建操作,直到我输入密码为止,即使我会找到一种方法来检查它,我也不确定其余的 mysql 命令是否有效。可能有一种更好的方法可以在不进入 mysql 控制台的情况下使用一个命令行添加 Mysql 用户。

谢谢。

最佳答案

据我所知,您的创建方法在 Rails 应用程序下以 root mysql 用户运行。然后你可以简单地通过 AR 适配器执行 mysql 命令:

# Create DB
ActiveRecord::Base.connection.execute("CREATE DATABASE IF NOT EXISTS \
`#{ActiveRecord::Base.sanitize(db_name)}` CHARACTER SET = `utf8` \
COLLATE = `utf8_general_ci`")
# Create User
ActiveRecord::Base.connection.execute("REPLACE INTO mysql.user \
(Host, User, Password) VALUES(\"localhost\", \
\"#{ActiveRecord::Base.sanitize(db_user)}\", \
PASSWORD(\"#{ActiveRecord::Base.sanitize(db_password)}\"))")
# Grant access
ActiveRecord::Base.connection.execute("GRANT ALL PRIVILEGES ON \
`#{ActiveRecord::Base.sanitize(db_name)}`.* TO \
`#{ActiveRecord::Base.sanitize(db_user)}`")
# Apply
ActiveRecord::Base.connection.execute("FLUSH PRIVILEGES")

关于mysql - 在 Rails Controller 操作中创建 Mysql 用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17210100/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com