【发布时间】:2014-12-04 05:13:59
【问题描述】:
是否可以(或正常)在同一台服务器上进行 Ruby on Rails 开发和生产?使用 sqlite 进行开发和使用 postgresql 进行生产是否可以?
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-4
是否可以(或正常)在同一台服务器上进行 Ruby on Rails 开发和生产?使用 sqlite 进行开发和使用 postgresql 进行生产是否可以?
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-4
这是不正常的,但有可能(有时也需要)调试仅在生产中出现的问题。有几个示例是资产(javascript、图像等),由于资产管道,它们在开发与生产中的服务方式不同。另一个领域是缓存,它在生产中往往有所不同,并且在开发中经常被禁用。
在 ruby on rails 中,通常(至少)三种服务器可以运行的模式。
这些被称为“环境”。
发展。这是您的本地机器,也是您在开发过程中通常在本地使用的机器
测试。这在您运行测试和测试套件时使用。
生产。这是用于通常位于远程服务器上的实际生产服务器的模式。
有时您确实希望/需要在“生产模式”下运行本地开发服务器,在这些情况下,您可以通过内联方式执行此操作
RAILS_ENV=production rails server
或
rails server -e production
或
rails server -e production -p 3001
# Specify the port (e.g. **-p 3001**) if you want to run on a different port (the default port is 3000),
# 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 也完全可以,而且确实很常见。
【讨论】:
我不会说在单个服务器上同时拥有两个环境是“正常的”或不。很多小型结构已经做到了,所以在我看来它不会造成任何问题。
无论如何,只要两个环境明确隔离(即至少两个单独的文件夹,以及用于 ruby 和 gem 版本的两个 rvm gemset 或 rbenv 环境),就不会造成任何问题。只要记住用不同的端口或套接字启动两个服务器,你就完成了。
这就是我为五个项目所做的方式,并且运行顺利。
【讨论】:
<myapp>_dev 用于开发环境,<myapp>_<unspeakable_hash_of_doom> 用于生产环境。此外,我使用不同的用户运行两个应用服务器。
您可以使用不同的port 在production 或development 等不同模式下在同一台机器上运行相同的应用程序
rails s # which will run on development mode like localhost:3000
rails s -e production 3002 # for production mode like localhost:3002
关于数据库的第二个答案.. 是的,您可以通过修改 database.yml 文件以不同的模式使用不同的数据库,例如用于开发 sqlite3 和生产 postgress
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
【讨论】:
您通常在开发模式下运行 RoR,在开发机器上 - 即在进行应用程序开发的本地系统上。关键是以开发友好的方式运行 RoR - 暴露错误消息,避免需要预编译资产等 - 它更慢但更容易积极使用。
可以使用不同的数据库系统进行开发和生产,但不建议这样做。理想情况下,应用程序开发环境与生产环境紧密匹配 - 允许您的代码以相同且可预测的方式工作。 SQLite3 的行为与 PostgreSQL 完全不同——两者具有不同的功能集。 PostgreSQL 可以做很多 SQLite 做不到的事情(我不确定是否相反)。请参阅 http://edgeguides.rubyonrails.org/active_record_postgresql.html 了解 PostgreSQL 特定的功能。
【讨论】: