a)我是rails初学者开发者的红宝石,我使用windows 7机器作为开发环境......
b)使用VirtualBox我刚刚在Windows 7“主机”内部安装了一个Linux ubuntu服务器“guest”,只是为了在linux机器上运行rails DEVELOPMENT环境。
c)为此,我配置了一个虚拟框SHARED FOLDER: 假设我在主机(窗口)上有这个共享文件夹:
c:\ rails \ esamiAnatomia
并将其安装在linux嵌入式服务器上:
/家庭/ solyaris /主机/ esamianatomia
d)在这个过时的“开发环境”中,我想用Windows上的首选可视化编辑器编辑源文件(sublime text),并在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机器,另一个用于窗口机器)?
非常感谢 乔治
答案 0 :(得分: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
答案 1 :(得分:0)
你所描述的几乎就是Vagrant所提供的设置,所以是的,你做得很好,其他人也都在做,但他们没有自己设置(并且可能会得到它)一些非常好的插件,你应该看看Vagrant)。
对于你的第二个问题:不。不是在飞行中。 Rails加载database.yml end然后用它连接到数据库。当您的Rails服务器运行时更改它时,更改将不会被注意到。但是,您可以为两台不同的机器设置新环境。然后,您可以在不同的环境之间切换,并根据环境访问一个或另一个数据库。