0

我已将我的 Rails 应用程序从 svn 存储库上传到我的服务器。在我的本地主机中它工作正常,但是当我尝试通过 Chrome 访问时,我收到以下错误:

There appears to be a database problem.
Your config/database.yml may not be written correctly. Please check it and fix any errors.
Your database schema may be out of date or nonexistant. Please run rake db:migrate to ensure that the database schema is up-to-date.
The database server may not be running. Please check whether it's running, and start it if it isn't.

我不知道该怎么做,因为这是我第一次尝试上传 Rails 项目,而且我正在做与远程服务器的本地主机相同的事情。

顺便说一句,我应该通过 ssh 连接运行 rails s 吗?

4

1 回答 1

1

更新:首先要做的是接受有关部署的教育:从 Rails 站点开始

所以问题是,在您的服务器上,您需要设置一个数据库,就像在本地计算机上一样。从 SVN 签出代码只会得到应用程序,而不是数据库。

您在标题中提到您在服务器上设置了乘客。乘客是 Apache(或 Nginx)的一个模块,它取代了rails s您在开发中使用的命令。您需要在此乘客配置文件中设置RailsEnv <something>以确定应用程序启动和运行的内容和方式。

如果数据库服务器相同(例如两个平台上的 MySQL)并且环境相同(例如“开发”),并且如果app/db/database.yml文件被检入源代码控制,则向前跳过。

如果您的数据库和环境不同(例如,开发中的 SQLLite 和生产中的 MySQL),那么您需要在 database.yml 中为环境添加必要的配置——数据库名称、主机、端口、用户名、密码(并指定根据环境,您的 Gemfile 中正确的数据库 gem)。如果您要存储密码,我不建议您签入 database.yml 文件,但这是一个单独的主题。最后,您需要在服务器上的 database.yml 中拥有正确的数据库配置。

然后,您可以bundle exec rake db:setup从应用程序的根目录在服务器上运行。这将使用当前模式初始化数据库,并运行所需的任何种子.rb 设置。检查rake -T以查看您可能考虑的其他选项。

完成后,后续部署需要您从 SVN 签出最新代码,并通常重新启动应用程序(使用Passenger,这是通过touch tmp/restart.txt应用程序根目录中的命令完成的。如果您对数据库结构进行了更改,则在重新启动之前, 跑bundle exec rake db:migrate

哦,是的,在生产中,如果您使用默认环境,您还需要bundle exec rake assets:precompile第一次运行,如果您添加了图像、更改了 javascript/coffeescript 或 css/sass 文件,则每次都需要运行。

话虽如此,@rwilliams 关于 Capistrano 的评论绝对是您要考虑的事情。如您所见,部署很棘手,并且随着您的应用程序变得越来越大,您会希望它变得简单。Capistrano 允许您设置脚本,使部署成为类似cap deploycap staging deploy:migrations. 有很多东西要学,但值得努力。

于 2012-11-29T18:04:19.097 回答