在同一台服务器上开发和生产Ruby on Rails是否可能(或正常)?是否可以使用sqlite进行开发和postgresql进行生产?
答案 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
development
或port
等不同模式下在同一台计算机上运行相同的应用
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。