【发布时间】:2011-09-20 03:35:44
【问题描述】:
Heroku 附加组件是特定于应用程序的,还是可以在多个应用程序之间共享(如果有的话)?
换句话说,如果我的帐户中有 5 个单独的应用程序,并且我想要每月 200 美元的 Ronin Postgre DB 插件和每月 20 美元的 WebSolr Silver,那么我的所有 5 个应用程序都可以以每人 220 美元的价格访问它们吗?月?或者您是否需要为每个单独的应用单独添加插件?
【问题讨论】:
标签: heroku
Heroku 附加组件是特定于应用程序的,还是可以在多个应用程序之间共享(如果有的话)?
换句话说,如果我的帐户中有 5 个单独的应用程序,并且我想要每月 200 美元的 Ronin Postgre DB 插件和每月 20 美元的 WebSolr Silver,那么我的所有 5 个应用程序都可以以每人 220 美元的价格访问它们吗?月?或者您是否需要为每个单独的应用单独添加插件?
【问题讨论】:
标签: heroku
是的,您可以在应用程序之间共享数据库实例 - 事实上,您甚至不需要使用 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 支持的,但是他们会积极阻止你这样做。
【讨论】: