我正在编写一个Rails应用程序,其功能通过ActiveResource与第三方API(streamsend)连接。我正在使用shopify的ActiveResource分支进行线程安全操作,因为我的应用程序的不同用户将拥有自己的streamsend API客户端ID和密钥,我不希望我的应用程序在与第三方API连接时踩到它们
我的控制器中有一个与private static void initRecyclerBin(AbsListView view) {
try {
Field localField = AbsListView.class.getDeclaredField("mRecycler");
localField.setAccessible(true);
Object recyclerBin = localField.get(view);
Class<?> clazz = Class.forName("android.widget.AbsListView$RecycleBin");
Field scrapField = clazz.getDeclaredField("mScrapViews");
scrapField.setAccessible(true);
ArrayList<View>[] scrapViews;
scrapViews = (ArrayList<View>[]) scrapField.get(recyclerBin);
if (null != scrapViews) {
int length = scrapViews.length;
for (int i = 0, count = 0; i < length; i++) {
if (null != scrapViews[i] && !scrapViews[i].isEmpty()) {
for (int j = 0; j < scrapViews[i].size(); j++) {
scrapViews[i].get(j);//this is the scrapViews
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
过滤器关联的内容:
around_action
在我的模特中:
private
# set StreamSend credentials in every request
def set_ss_credentials
StreamSend.site,
StreamSend.user,
StreamSend.password = current_user_credentials
yield
ensure
StreamSend.site =
StreamSend.user =
StreamSend.password = nil
end
DEFAULT_SITE, DEFAULT_USER, DEFAULT_PASSWORD = [
Rails.application.secrets.streamsend_api_endpoint, "username", "password" ]
def current_user_credentials
current_user.present? ?
[ Rails.application.secrets.streamsend_api_endpoint, current_user.ss_userid, current_user.ss_key ] :
[ DEFAULT_SITE, DEFAULT_USER, DEFAULT_PASSWORD ]
end
网站和凭据旨在通过控制器操作和登录的当前用户输入。
这在使用WEBrick时工作正常,但由于生产模式下Rails的默认设置为class StreamSend < ActiveResource::Base
self.format = :xml
def self.audience
@audience ||= StreamSend::Audience.find(:first)
end
end
,我的应用程序将无法启动,因为实际模型缺少网站和凭据。
有没有办法告诉config.eager_load = true
忽略我依赖ARes的模型,但是急切地加载我所有的实际数据库模型?
答案 0 :(得分:0)
在生产模式下启动时的错误来自:
def self.audience
@audience ||= StreamSend::Audience.find(:first)
end
默认情况下,硬编码audience
允许我以生产模式启动应用程序。现在这很好,因为Streamsend每个帐户只支持一个受众。