如何在Heroku上运行Rails时获取应用程序名称?

时间:2011-09-20 16:16:39

标签: ruby-on-rails ruby-on-rails-3 heroku

这意味着app-name.heroku.com。

请注意,这与Rails.application.class.parent_name不同。

Rails.application.class.parent_name在应用程序中定义。

使用Rails 3。

4 个答案:

答案 0 :(得分:14)

ENV['URL']解决方案仅在请求期间有效。

因此,如果你需要知道请求之外的app id,你可以像这样设置一个配置变量

heroku config:add APP_NAME=<myappname> --app <myappname>

启用lab feature,允许您在编译期间使用它们

heroku labs:enable user-env-compile -a myapp

现在我可以在这里找到我的应用名称:

ENV["APP_NAME"] # '<myappname>'

如果您想根据应用的名称或ID加载不同的配置文件(例如使用oauth凭据),这很方便。

答案 1 :(得分:1)

Heroku实际上默认在环境中设置一个URL变量

app_name = ENV['URL'].split(".").first

此处引用:http://devcenter.heroku.com/articles/config-varshttp://ididitmyway.heroku.com/past/2010/11/9/sinatra_settings_and_configuration/

更新:实际上,默认情况下,URL变量可能不存在,但您可以随时添加环境变量“app name”,除非您试图一起避免这种方法。 / p>

更新2:实际上,另一个明显但有限的方法是从请求变量中获取域名,但这会限制您的控制器。 http://guides.rubyonrails.org/action_controller_overview.html#the-request-object

答案 2 :(得分:1)

Rails.application.config.session_options[:key].sub(/^_/,'').sub(/_session/,'')
=> "test-app"

这是Rails应用程序的名称,因为当你执行'rails new app-name'时拼写错误

使用它,你可以这样做:

class << Rails.application
  def name
    Rails.application.config.session_options[:key].sub(/^_/,'').sub(/_session/,'')
  end
end

Rails.application.name
=> 'test-app'

答案 3 :(得分:0)

如果您在this每个应用中的不同环境中运行,则可以在staging.rbproduction.rb中设置变量。