【问题标题】:Ruby-on-rails development and production on same server在同一台服务器上进行 Ruby-on-rails 开发和生产
【发布时间】:2014-12-04 05:13:59
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    这是不正常的,但有可能(有时也需要)调试仅在生产中出现的问题。有几个示例是资产(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 也完全可以,而且确实很常见。

    【讨论】:

      【解决方案2】:

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

      无论如何,只要两个环境明确隔离(即至少两个单独的文件夹,以及用于 ruby​​ 和 gem 版本的两个 rvm gemset 或 rbenv 环境),就不会造成任何问题。只要记住用不同的端口或套接字启动两个服务器,你就完成了。

      这就是我为五个项目所做的方式,并且运行顺利。

      【讨论】:

      • 您将它们绑定到同一个数据库还是不同的数据库?
      • @napkinsterror 我通常将它们绑定到不同的数据库,即<myapp>_dev 用于开发环境,<myapp>_<unspeakable_hash_of_doom> 用于生产环境。此外,我使用不同的用户运行两个应用服务器。
      【解决方案3】:

      您可以使用不同的portproductiondevelopment 等不同模式下在同一台机器上运行相同的应用程序

      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
      

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-05-01
          • 2016-01-28
          • 2014-04-16
          • 1970-01-01
          • 2014-11-25
          • 2013-11-19
          • 1970-01-01
          • 2011-03-08
          相关资源
          最近更新 更多