2011-09-19 73 views
0

Heroku是否附加了应用程序特定的应用程序,或者它们可以在多个应用程序之间共享?Heroku在应用程序之间部署共享附件

换句话说,如果我的帐户中有5个独立的应用程序,并且我希望每月200美元的Ronin Postgre DB附加组件和WebSolr Silver每月20美元,那么我的所有应用程序都可以使用它们的$ 220每月?或者你需要为每个单独的应用程序单独加载项吗?

回答

0

是的,你可以在应用程序之间共享数据库实例 - 事实上,你甚至不需要使用Ronin插件,你可以使用包含的PG来实现 - 参见this线程,我提出了一个解决方案,在第二个应用程序中使用与第一个相同的DB url。

当你的Heroku插件通常写一堆Heroku的配置变量为您的应用程序,他们则在他们写文件使用的 - 例如database.yml中 - 实际database.yml文件的Heroku写入到您的应用程序是:

<% 

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也可能会发生同样的情况。我也想象这是Heroku不支持的,他们会积极阻止你这样做。

+0

感谢您分享数据库的信息。我继续与Heroku联系,并被告知通常大多数附加组件都是特定于应用程序的,但可以共享数据库,但不是WebSolr附加组件。正如你所提到的那样,可能有办法,但他们可能不希望这样。 – Frank