这个问题是关于让分析脚本在这三种环境之一中运行。
这就是我打算如何制定的,但欢迎提出任何建议。
在我的帮手
def render_analytics
if local_request? || #on a Heroku subdomain
false
else
true
end
end
在我的布局中
<%= render 'shared/analytics' if render_analytics %>
render_analytics
返回布尔值:true
如果在mysite.com上,false
如果是local_request?
或在Heroku子域上(例如:mysite.heroku.com {{ 1}} mysite-staging.heroku.com)
那么如何才能知道它是否来自Heroku。
答案 0 :(得分:1)
使用hostname
:
if local_request? || `hostname` =~ /heroku/i
更清洁的解决方案是在部署期间在您的环境中设置常量,以便您知道自己是否在Heroku上。由于Heroku部署过程在让您使用配置文件方面非常不透明,因此您可能会让方法记住结果,这样每次渲染视图时都不会进行系统调用。
我刚刚用一种检查数据库适配器的方法做了类似的事情,以解释我的开发环境和Heroku之间的差异。这是我的lib/adapter.rb
:
class Adapter
cattr_reader :adapter
def self.postgres?
@@adapter ||= Rails.configuration.database_configuration[Rails.env]['adapter']
adapter == 'postgresql'
end
def self.mysql?
@@adapter ||= Rails.configuration.database_configuration[Rails.env]['adapter']
adapter == 'mysql'
end
def self.sqlite?
@@adapter ||= Rails.configuration.database_configuration[Rails.env]['adapter']
adapter.include?('sqlite')
end
end
请注意,除此之外,您还必须更改application.rb
,以便将lib
添加到您的自动加载路径中:
config.autoload_paths += Dir["#{config.root}/lib/**/"] # include all subdirectories