【发布时间】:2011-04-27 07:53:49
【问题描述】:
我正在创建一个允许用户使用自己的域的应用。我在我的 Rails 应用程序中使用什么方法来自动向 Heroku 注册他们选择的域?如果他们更改它,我也需要注销它。
【问题讨论】:
标签: ruby-on-rails dns heroku
我正在创建一个允许用户使用自己的域的应用。我在我的 Rails 应用程序中使用什么方法来自动向 Heroku 注册他们选择的域?如果他们更改它,我也需要注销它。
【问题讨论】:
标签: ruby-on-rails dns heroku
heroku gem 现已被弃用。您应该改用heroku.rb gem。命令略有变化,但基本相同。
require 'heroku-api'
heroku = Heroku::API.new(:api_key => API_KEY) # use API Key
heroku = Heroku::API.new(:username => USERNAME, :password => PASSWORD) # use username and password
heroku = Heroku::API.new(:headers => {'User-Agent' => 'custom'}) # use custom header
heroku.delete_domain('app', 'example.com') # remove the 'example.com' domain from the 'app' app
heroku.get_domains('app') # list configured domains for the 'app' app
heroku.post_domain('app', 'example.com') # add 'example.com' domain to the 'app' app
【讨论】:
我已经联系了 Heroku,他们只是将我指向 their api,并说可以这样使用它。
恐怕没有。 Our API 仅由客户端的代码“记录”。
您可能会发现我们的 google 小组也有助于从社区成员那里获得建议:http://groups.google.com/group/heroku/
奥伦
下面是简单的操作方法:
require 'heroku'
heroku = Heroku::Client.new('heroku_username', 'heroku_password')
heroku.add_domain('heroku_app_name', 'example.com')
heroku.remove_domain('heroku_app_name','example.com')
请参阅the api 了解更多信息。
当然,我建议不要将明文密码放入您的代码中。您可以做的一件好事是使用 heroku 环境变量从代码中获取密码。
heroku = Heroku::Client.new(ENV['HEROKU_USER'], ENV['HEROKU_PASSWORD'])
然后你可以在你的应用上设置环境变量
$> heroku config:add HEROKU_USER='heroku_username'
$> heroku config:add HEROKU_PASSWORD='heroku_password'
从命令行。
【讨论】:
gem 来自 heroku,是推荐的方法。我刚刚就同样的问题联系了 Heroku,得到了回复:
您还需要告诉 Heroku 域以及将其路由到何处。 CNAME 告诉 DNS 如何将请求发送到 Heroku。现在你必须告诉 Heroku 将它发送到哪个应用程序。您可以通过将域添加到您的应用程序来执行此操作。在您的情况下,您需要在您的应用程序中运行“heroku 域:添加 my.domain.com”。您也可以通过我们的 API 从应用程序内部以编程方式执行此操作。有关如何连接和使用 API 的示例,请参阅 Heroku gem (http://github.com/heroku/heroku)。
【讨论】:
您通常add domains in Heroku 的方式是通过Heroku gem 使用Heroku API。
您可以调用一个名为 heroku domains:add 的命令
$ heroku domains:add example.com
正如我之前所说,客户端调用 Heroku API。您可以从库中提取 Heroku 域 API 信息,并创建一个自定义脚本来调用 Heroku API 以在您的应用中添加和删除域。
注意。因为您是“逆向工程”和似乎没有记录的 API,所以您应该请求 Heroku 允许这样做,以确保您没有创建违反他们的 TOS 的东西。
【讨论】: