Heroku rails部署在应用程序之间共享附加组件

时间:2011-09-19 19:02:12

标签: heroku

Heroku附加组件应用程序是否特定,或者如果您拥有它们,它们是否可以在多个应用程序之间共享?

换句话说,如果我的帐户中有5个单独的应用程序,而我想要每月200美元的Ronin Postgre数据库附加组件,以及每月20美元的WebSolr Silver 20美元,我的所有5个应用程序都可以以每个220美元的价格访问它们月?或者您是否需要为每个应用程序单独添加附加组件?

1 个答案:

答案 0 :(得分:0)

是的,您可以在应用程序之间共享数据库实例 - 事实上您甚至不需要使用Ronin插件,您可以使用包含的PG执行此操作 - 请参阅我提出解决方案的this线程通过在第二个应用程序中使用相同的DB url作为第一个来执行此操作。

当您添加时,heroku通常会为您的应用程序编写一堆heroku配置变量,然后在他们编写的文件中使用它们 - 例如database.yml - heroku写入您的应用程序的实际database.yml文件是:

<%

require 'cgi'
require 'uri'

begin
  uri = URI.parse(ENV["DATABASE_URL"])
rescue URI::InvalidURIError
  raise "Invalid DATABASE_URL"
end

raise "No RACK_ENV or RAILS_ENV found" unless ENV["RAILS_ENV"] || ENV["RACK_ENV"]

def attribute(name, value)
  value ? "#{name}: #{value}" : ""
end

adapter = uri.scheme
adapter = "postgresql" if adapter == "postgres"

database = (uri.path || "").split("/")[1]

username = uri.user
password = uri.password

host = uri.host
port = uri.port

params = CGI.parse(uri.query || "")

%>

<%= ENV["RAILS_ENV"] || ENV["RACK_ENV"] %>:
  <%= attribute "adapter",  adapter %>
  <%= attribute "database", database %>
  <%= attribute "username", username %>
  <%= attribute "password", password %>
  <%= attribute "host",     host %>
  <%= attribute "port",     port %>

<% params.each do |key, value| %>
  <%= key %>: <%= value.first %>
<% end %>

我认为如果将websolr添加到单个实例中然后查看设置的配置变量并在其他应用程序中设置相同,则可以使用websolr。我还想象Heroku不支持这个,但是他们会主动阻止你这样做。