【安装】
安装PostgreSQL及其开发库:
sudo apt-get install postgresql postgresql-contrib libpq-dev
现在已经安装了PostgreSQL,然后创建一个新的数据库用户,你的Rails应用程序将使用它。
创建PostgreSQL超级用户(可自定义用户名):
sudo - -u postgres createuser -s pguser
如果要为数据库用户设置密码,请使用以下命令进入PostgreSQL控制台:
sudo -u postgres psql
PostgreSQL控制台由postgres=#提示符表示。在PostgreSQL提示符下,输入此命令以设置您创建的数据库用户的密码:
\password pguser
在提示符下输入所需的密码,然后确认。
现在您可以输入以下命令退出PostgreSQL控制台:
\q
尝试创建一个Rails应用程序:
在主目录中创建一个新的Rails应用程序。使用 -d postgresql 选项将 PostgreSQL 设置为数据库,并确保将突出显示的单词替换为您的应用程序名称:
cd ~ rails new appname -d postgresql
然后进入应用程序的目录:
cd appname
配置应用程序的数据库连接:
您创建的PostgreSQL用户将用于创建应用程序的测试和开发数据库。我们需要为您的应用程序配置正确的数据库设置。
在您喜欢的文本编辑器中打开应用程序的数据库配置文件。我们将使用vi:
vi config/database.yml
找到“default: &default”:
default: &default adapter: postgresql encoding: unicode # For details on connection pooling, see Rails configuration guide # https://guides.rubyonrails.org/configuring.html#database-pooling pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> host: localhost username: pguser password: pguser_password
保存并退出。
创建应用程序数据库:
使用此rake命令创建应用程序的development和test数据库:
rake db:create
输出:
Created database 'appname_development' Created database 'appname_test'
测试配置:
测试应用程序是否能够使用PostgreSQL数据库的最简单方法是尝试运行它。
例如,要运行开发环境(缺省值),请使用以下命令:
rails server
输出:
=> Booting Puma => Rails 7.0.4 application starting in development => Run `bin/rails server --help` for more startup options Puma starting in single mode... * Puma version: 5.6.5 (ruby 3.0.5-p211) ("Birdie's Version") * Min threads: 5 * Max threads: 5 * Environment: development * PID: 60536 * Listening on http://127.0.0.1:3000 * Listening on http://[::1]:3000 Use Ctrl-C to stop
这将在端口3000上的本地主机上启动Rails应用程序。
如果您的Rails应用程序位于远程服务器上,并且您希望通过Web浏览器访问它,则一种简单的方法是将其绑定到服务器的公共IP地址。首先,查找服务器的公共IP地址,然后将其与rails server命令一起使用(将其替换为突出显示的部分):
rails server --binding=server_public_IP
输出:
=> Booting Puma => Rails 7.0.4 application starting in development => Run `bin/rails server --help` for more startup options Puma starting in single mode... * Puma version: 5.6.5 (ruby 3.0.5-p211) ("Birdie's Version") * Min threads: 5 * Max threads: 5 * Environment: development * PID: 60565 * Listening on http://202.202.202.202:3000 Use Ctrl-C to stop
现在,您应该能够通过端口3000上的服务器公共IP地址在Web浏览器中访问您的Rails应用程序:
访问网络浏览器:
http://server_public_IP:3000
如果您看到“欢迎登陆”Ruby on Rails页面,您的应用程序已正确配置,并连接到PostgreSQL数据库。
Rails version: 7.0.4 Ruby version: ruby 3.0.5p211 (2022-11-24 revision ba5cf0f7c5) [x86_64-linux]
【排错】
报错:could not change directory to “/root”
当创建 pguser 时,报错:
could not change directory to "/root": Permission denied
参考:https://blog.csdn.net/qq_41538097/article/details/107353113
参考:https://www.cnblogs.com/bigorang/p/12165261.html
参考:https://serverfault.com/questions/718176/postgres-root-permission-denied
实际上命令已经执行。
There are three parts in the output:
1. could not change directory to “/root”: Permission denied: your ‘sudo’ succeeds but your postgres user fails to access the home of root. You may check for the setting of homedirectory for postgres in /etc/passwd.
2. The files belonging to this database system will be owned by user “postgres”. This user must also own the server process. : This is the normal permissions reminder from initdb. So you know initdb started regardles of failed directory change.
3. initdb: invalid locale settings; check LANG and LC_* environment variables: here initdb fails for real due to missing locale settings.
I think You need to check your sudo configuration and make sure your postgres user has a proper environment before calling initdb.
【参考】
参考:https://cloud.tencent.com/developer/article/1352641
参考:https://cloud.tencent.com/developer/article/1356851