0

a) 我是 Rails 初学者开发人员,我使用 windows 7 机器作为开发环境...

b)我刚刚安装了VirtualBox,在Windows 7“主机”内,一个Linux ubuntu服务器“guest”,只是为了在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机器,另一个用于window机器)?

非常感谢乔治

4

2 回答 2

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
于 2013-10-14T18:42:38.613 回答
0

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

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

于 2013-08-19T19:11:31.057 回答