Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 一个应用程序但不同的yml文件_Ruby On Rails - Fatal编程技术网

Ruby on rails 一个应用程序但不同的yml文件

Ruby on rails 一个应用程序但不同的yml文件,ruby-on-rails,Ruby On Rails,我有10个应用程序运行在同一个git标记上,这意味着除了config/database.yml(数据库设置中有更改)之外,应用程序端没有任何更改 这会消耗服务器中的大量空间,并且我有可伸缩性问题。因此,是否可以克隆一个应用程序,并为同一应用程序的其余9个实例创建不同的yml文件。是否可以应用软链接方法进行此操作 如果我正确理解你的问题, 您的问题只是从同一个应用程序连接到不同的数据库,在这种情况下,您可以检查从一个主应用程序连接多个数据库的方法。读这个 Rails中有很多优点,让您也可以轻松地

我有10个应用程序运行在同一个git标记上,这意味着除了config/database.yml(数据库设置中有更改)之外,应用程序端没有任何更改


这会消耗服务器中的大量空间,并且我有可伸缩性问题。因此,是否可以克隆一个应用程序,并为同一应用程序的其余9个实例创建不同的yml文件。是否可以应用软链接方法进行此操作

如果我正确理解你的问题, 您的问题只是从同一个应用程序连接到不同的数据库,在这种情况下,您可以检查从一个主应用程序连接多个数据库的方法。读这个

Rails中有很多优点,让您也可以轻松地完成这项工作。这里

这样,您只需要有一个database.yml文件,并为所有实例添加所需的数据库数量


希望有帮助

如果所有网站的应用程序逻辑相同,则路由也相同,并且只有几种不同的方法:

  • 为每个应用程序和相应的apache/nginx映射使用不同的端口。 在这里,您必须为每个端口使用一个正在运行的应用程序

    www.domain-1.com-->本地主机:3001, www.domain-2.com-->本地主机:3002等

    这就是你现在拥有的

  • 在一个应用程序中为每个站点使用不同的控制器。Apache/nginx映射将只映射到一个应用程序:

    www.domain-1.com-->本地主机:3000, www.domain-2.com-->本地主机:3000等

    您可以在routes.rb()中确定合适的控制器

    可能是这样的:

    routes.rb:

    require 'domain'
    constraints(Domain) do
      match '/' => 'controller-1#action'
    end
    
    class Domain
      def self.matches?(request)
        request.domain.present? && request.domain == "www.domain-1.com"
      end
    end
    
    关注点/域。rb:

    require 'domain'
    constraints(Domain) do
      match '/' => 'controller-1#action'
    end
    
    class Domain
      def self.matches?(request)
        request.domain.present? && request.domain == "www.domain-1.com"
      end
    end
    
    至于yml文件,您也可以将它们合并到一个应用程序中

  • 一个应用程序但不同的yml文件

    只需更新问题中给出的database.yml文件。假设我们的开发实例是development-1、development-2、development-3和development-4。

    首先,您只需创建环境文件
    development-1.rb
    (可以找到insideconfig/environments/)的3个副本,并将其重命名为
    development-2.rb
    development-3.rb
    development-4.rb

    然后,只需在启动服务器之前运行以下步骤

    RAILS_ENV=development rake db:create 
    //(OR just rake db:create as it defaults to development)
    RAILS_ENV=development-2 rake db:create
    RAILS_ENV=development-3 rake db:create
    RAILS_ENV=development-4 rake db:create
    


    然后,使用不同的服务器pid启动所有实例,如下所示

    这将从同一个源和单个
    database.yml
    文件同时启动所有实例

    您还可以像往常一样将连接详细信息放入database.yml中,并使用如下名称:

    *记录数据库生产:

    adapter: mysql
      host: other_host
      username: logmein
      password: supersecret
      database: logs
    
    然后在您的特殊型号中:

    require 'domain'
    constraints(Domain) do
      match '/' => 'controller-1#action'
    end
    
    class Domain
      def self.matches?(request)
        request.domain.present? && request.domain == "www.domain-1.com"
      end
    end
    
    class AccessLog
    防止那些讨厌的凭据出现在应用程序代码中。

    如果希望在多个模型中重用此连接,则应创建一个新的抽象类并从中继承,因为连接与类紧密耦合(如此处、此处和此处所述),并且将为每个类创建新连接

    如果是这样的话,设置如下:

    require 'domain'
    constraints(Domain) do
      match '/' => 'controller-1#action'
    end
    
    class Domain
      def self.matches?(request)
        request.domain.present? && request.domain == "www.domain-1.com"
      end
    end
    
    classlogdatabase
    根据模型的标准Rails命名约定,在app_1/models文件夹中创建一个新文件,在本例中,该文件是一个名为a_table.rb的文件,因为它连接到一个名为a_table的表,然后以标准Rails模型格式设置类定义,如下所示

    class ATable < ActiveRecord::Base
    end
    
    类ATable 但tha模型如何知道与国外数据库对话?

    您所需要做的就是向类中添加build_连接声明,这样您就可以

    class ATable < ActiveRecord::Base
      establish_connection "foreign_#{Rails.env}"
    end
    
    类ATable 就像magick一样,在ATable下运行app 1的任何环境都将在app 1的database.yml文件中拾取相应的环境条目 e、 g.在上述示例中,在生产模式下运行时,一个_表将自动连接到外部_生产条目

    我发现创建一个单独的应用程序对于我的需求来说太过分了。应用程序本身只会添加迁移,不需要视图、控制器、助手等。。。只是一个模型和运行迁移的能力


    您想对所有应用程序和不同的yml文件使用相同的应用程序代码。我说得对吗?@Ghostider:没错,指定不同的环境怎么样?您有一个带有一组YML文件的应用程序源。这些选项指定每个环境的设置。然后,您可以为特定的环境启动一个新的应用程序实例。此应用程序支持所需的YML文件。然后,您可以指定运行应用程序的自定义环境。默认情况下,Rails具有测试、开发和生产功能。您可以指定应用程序1、应用程序2等环境。这可能不是最好的解决方案,但确实有点道理。感谢您的回复。我知道从一个sing yml文件连接到不同的数据库,但是如何解决网站的域名问题呢。每个网站都有一个唯一的域名。这是在/etch/apache2/sites enabled中配置的