【问题标题】:running rails on guest linux virtualbox: a database.yml issue在来宾 linux virtualbox 上运行 rails:database.yml 问题
【发布时间】:2013-10-15 03:21:01
【问题描述】:

a) 我是一名 ruby​​ in rails 初学者开发者,我使用 windows 7 机器作为开发环境...

b) 我刚刚安装了 VirtualBox,在 Windows 7“主机”内,一个 Linux ubuntu 服务器“访客”,只是为了在 linux 机器上运行 rails 开发环境。

c) 为此,我配置了一个 virtualbox SHARED FOLDER: 假设我在主机(窗口)上有这个共享文件夹:

c:\rails\esamiAnatomia

并将其安装在 linux 嵌入式服务器上:

/home/solyaris/host/esamianatomia

d) 在这个扩展的“开发环境”中,我想在 Windows 上使用我喜欢的可视化编辑器(崇高文本)编辑源文件并在 linux 上运行 rails server。

问题涉及database.yml配置文件:

/home/solyaris/host/esamianatomia/config/database.yml

因为在 Windows 上我有一个数据库 (postgresql) 响应端口 5433,具有特定的用户名/密码

但在linux数据库中响应端口5432等

问题:

1) 是“arcgitectural 解决方案好吗?(我的意思是:从 Windows 7 主机开发/编辑,但运行 linux 来宾服务器的 rails 服务器);

2) 有一种方法可以即时更改/配置 database.yml(我的意思是:使用两个不同的 database.yml 文件:一个用于 linux 机器,另一个用于窗口机器)?

非常感谢 乔治

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 postgresql database-connection virtualbox


    【解决方案1】:

    如果您不害怕使用 Rails 的胆量,您可以在技术上实现 2。与任何让您访问内部 Rails 组件的解决方案一样,这可能随时停止工作,但幸运的是,这部分 API 不太可能经常更改(如果有的话)。不过,使用它需要您自担风险。

    这是我在项目中的做法。首先修改你的应用程序如下:

    # config/application.rb:
    
    # After require 'rails/all'
    require_relative 'db_override'
    

    然后创建这个新文件:

    # config/db_override.rb:
    case Socket.gethostname
    when 'host1'
      $db_config = 'config/host1_database.yml'
    when 'host2'
      $db_config = 'config/host2_database.yml'
    else
      $db_config = nil # Use the default config/database.yml
    end
    
    if $db_config
      class DBConfigSelect < Rails::Railtie
        initializer "db_config_select", before: "active_record.initialize_database" do
          puts "Using custom DB configuration: #{$db_config}"
    
          # Get the existing path configuration
          cur_paths = Rails.application.config.paths['config/database'].instance_variable_get :@paths
    
          # Override the default config sources
          cur_paths.shift
          cur_paths.push $db_config
        end
      end
    end
    

    【讨论】:

    • rails 5 - 虽然 5 年后现在也是实际的)
    【解决方案2】:

    你所描述的几乎是Vagrant 提供的设置,所以是的,你做得很好,其他人也在这样做,但他们没有自己设置(而且可能真的得到了一些不错的插件,你应该看看 Vagrant)。

    第二个问题:不。不是在飞行中。 Rails 加载 database.yml 端,然后用它连接到数据库。当您在 Rails 服务器运行时更​​改它时,这些更改不会被注意到。但是,您可以为两台不同的机器设置一个新环境。然后,您可以在不同的环境之间切换,并根据环境访问一个或另一个数据库。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-06
      • 2016-07-14
      • 1970-01-01
      • 1970-01-01
      • 2012-09-08
      • 1970-01-01
      • 1970-01-01
      • 2020-09-28
      相关资源
      最近更新 更多