在同一台服务器上进行Ruby-on-rails开发和生产

时间:2014-10-09 10:03:17

标签: ruby-on-rails ruby-on-rails-4

在同一台服务器上开发和生产Ruby on Rails是否可能(或正常)?是否可以使用sqlite进行开发和postgresql进行生产?

4 个答案:

答案 0 :(得分:4)

这是不正常的,但有可能 - 有时需要 - 调试仅出现在生产中的问题。一些例子是资产(javascripts,图像等),它们在开发过程中以不同的方式提供,而不是由于资产管道而产生的。另一个领域是缓存,它在生产中往往不同,并且在开发过程中经常被禁用。

在轨道上的红宝石中,通常(至少)有三种模式可供服务器运行 这些被称为'环境'。

  • 发展。这是您的本地计算机,是您在开发期间通常在本地使用的计算机

  • 测试。运行测试和测试套件时使用此方法。

  • 生产。这是用于实际生产服务器的模式,通常位于远程服务器上。

有时您确实需要/需要以“生产模式”运行本地开发服务器。在这些情况下,您可以使用

进行内联
RAILS_ENV=production rails server

rails server -e production

rails server -e production 3001 
# Specify the port (dev is default 3000) if you want to run on a different port,
# e.g. to run in development mode in one window and production mode in another.

当您以其他模式(例如生产)运行本地服务器时,您需要注意这也会影响您的数据库连接。 config/database.yml有您的数据库连接,使用RAILS_ENV设置 您可能希望/需要以生产模式运行服务器 - 但使用本地数据库。您可以通过临时使用config/database.yml生产块中开发块的实际设置来执行此操作。确保之后保存原始设置/恢复(在下次推送之前)。

在生产中使用sqlite本地和mysql / postgres / oracle也很完全正常。

答案 1 :(得分:3)

我不会说在单个服务器上同时拥有这两种环境是“正常”还是不正常。很多小型结构已经做到了,所以在我看来它不会造成任何问题。

无论如何,只要两个环境都被清楚地隔离(即至少两个单独的文件夹,以及两个用于ruby和gem版本的rvm gemsets或rbenv环境),它不会导致任何问题。只记得用不同的端口或套接字启动两台服务器,你就完成了。

这就是我为五个项目所做的事情而且没有遇到麻烦。

答案 2 :(得分:1)

您可以使用不同production

developmentport等不同模式下在同一台计算机上运行相同的应用
rails s  # which will run on development mode like localhost:3000
rails s -e production 3002  # for production mode like localhost:3002

关于数据库的第二个答案..是的,您可以通过修改sqlite3文件

在不同模式下使用不同的数据库,例如开发postgress和生产database.yml
    development:
      adapter: sqlite3
      database: yourapp_development
      username: root
      password: root
      host: localhost

   production:
      adapter: postgresql
      host: localhost
      username: postgres
      password: password
      pool: 5
      timeout: 5000
      database: yourapp_production

并在 gemfile

group :development do
  gem "sqlite3"
end
group :production do
 gem 'pg'
end

答案 3 :(得分:0)

您通常在开发计算机上以开发模式运行RoR - 即在进行应用程序开发的本地系统上运行。重点是以开发友好的方式运行RoR - 暴露错误消息,避免预编译资产等 - 它更慢但更容易积极地工作。

可以使用不同的数据库系统进行开发和生产,但这是不可取的。理想情况下,应用程序开发环境与生产环境紧密匹配 - 允许您的代码以相同且可预测的方式工作。 SQLite3的行为与PostgreSQL完全不同 - 两者具有不同的功能集。 PostiteSQL可以做很多事情,SQLite不能做(我不确定反过来)。有关PostgreSQL特定功能,请参阅http://edgeguides.rubyonrails.org/active_record_postgresql.html