2

我在我安裝的APN on Rails gem上觸發了命令rake apn:notifications:deliver之後,我正在努力解決此錯誤。未初始化的常量APN :: App :: RAILS_ENV

它在咆哮RAILS_ENV變量。我已經嘗試了幾次將RAILS_ENV更改爲Rails.env的叉,但我仍然得到相同的錯誤。我已經在that repo上發佈了我的問題,希望我能找到某個地方。

我對鐵軌的瞭解還不夠深入。我希望有人能指出我正確的方向,以便我能更好地理解問題所在,並b)解決問題。

我使用捆綁,我指着我的寶石文件git的回購:你使用rake apn:notifications:deliver

air:apnapp azcoov$ rake apn:notifications:deliver --trace 
    /Users/azcoov/.bundler/ruby/1.8/apn_on_rails-ca98c7c130f0/lib/apn_on_rails/version.rb:2: warning: already initialized constant VERSION 
    ** Invoke apn:notifications:deliver (first_time) 
    ** Invoke environment (first_time) 
    ** Execute environment 
    ** Execute apn:notifications:deliver 
    rake aborted! 
    uninitialized constant APN::App::RAILS_ENV 
    /Users/azcoov/.bundler/ruby/1.8/apn_on_rails-ca98c7c130f0/lib/apn_on_rails/app/models/apn/app.rb:11:in `cert' 
    /Users/azcoov/.bundler/ruby/1.8/apn_on_rails-ca98c7c130f0/lib/apn_on_rails/app/models/apn/app.rb:22:in `send_notifications' 
    /Users/azcoov/.bundler/ruby/1.8/apn_on_rails-ca98c7c130f0/lib/apn_on_rails/app/models/apn/app.rb:32:in `send_notifications' 
    /Users/azcoov/.bundler/ruby/1.8/apn_on_rails-ca98c7c130f0/lib/apn_on_rails/app/models/apn/app.rb:31:in `each' 
    /Users/azcoov/.bundler/ruby/1.8/apn_on_rails-ca98c7c130f0/lib/apn_on_rails/app/models/apn/app.rb:31:in `send_notifications' 
    /Users/azcoov/.bundler/ruby/1.8/apn_on_rails-ca98c7c130f0/lib/apn_on_rails/rails/../tasks/apn.rake:7 
    /Library/Ruby/Gems/1.8/gems/rake-0.9.2.2/lib/rake/task.rb:205:in `call' 
    /Library/Ruby/Gems/1.8/gems/rake-0.9.2.2/lib/rake/task.rb:205:in `execute' 
    /Library/Ruby/Gems/1.8/gems/rake-0.9.2.2/lib/rake/task.rb:200:in `each' 
    /Library/Ruby/Gems/1.8/gems/rake-0.9.2.2/lib/rake/task.rb:200:in `execute' 
    /Library/Ruby/Gems/1.8/gems/rake-0.9.2.2/lib/rake/task.rb:158:in `invoke_with_call_chain' 
    /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/monitor.rb:242:in `synchronize' 
    /Library/Ruby/Gems/1.8/gems/rake-0.9.2.2/lib/rake/task.rb:151:in `invoke_with_call_chain' 
    /Library/Ruby/Gems/1.8/gems/rake-0.9.2.2/lib/rake/task.rb:144:in `invoke' 
    /Library/Ruby/Gems/1.8/gems/rake-0.9.2.2/lib/rake/application.rb:116:in `invoke_task' 
    /Library/Ruby/Gems/1.8/gems/rake-0.9.2.2/lib/rake/application.rb:94:in `top_level' 
    /Library/Ruby/Gems/1.8/gems/rake-0.9.2.2/lib/rake/application.rb:94:in `each' 
    /Library/Ruby/Gems/1.8/gems/rake-0.9.2.2/lib/rake/application.rb:94:in `top_level' 
    /Library/Ruby/Gems/1.8/gems/rake-0.9.2.2/lib/rake/application.rb:133:in `standard_exception_handling' 
    /Library/Ruby/Gems/1.8/gems/rake-0.9.2.2/lib/rake/application.rb:88:in `top_level' 
    /Library/Ruby/Gems/1.8/gems/rake-0.9.2.2/lib/rake/application.rb:66:in `run' 
    /Library/Ruby/Gems/1.8/gems/rake-0.9.2.2/lib/rake/application.rb:133:in `standard_exception_handling' 
    /Library/Ruby/Gems/1.8/gems/rake-0.9.2.2/lib/rake/application.rb:63:in `run' 
    /Library/Ruby/Gems/1.8/gems/rake-0.9.2.2/bin/rake:33 
    /usr/bin/rake:19:in `load' 
    /usr/bin/rake:19 
    Tasks: TOP => apn:notifications:deliver 

回答

2

Rails的哪個版本?我也遇到了這個問題。我的Rails知識不是很深,但似乎問題是對RAILS_ *環境變量的棄用。我使用的Rails 3.1.0,我沒有:

RAILS_ROOT/ENV/blah 

在我的環境中。相反,我有:

Rails.root/env/blah 

當我在app /型號Rails.env取代RAILS_ENV/APN/app.rb問題消失。

那麼,這個寶石兼容Rails 3.1.0?看起來不是。是否有解決方法可以在生產環境中使用?也許定義某處:

APN::App::RAILS_ENV = Rails.env 

但是在哪裏?

UPDATE:

我得到了它與garyfoster這裏描述的解決方法工作:https://github.com/PRX/apn_on_rails/issues/53

總之,三件事情:

1)添加這個貧民窟劈死你的config/environment.rb文件中:

APN::App::RAILS_ENV = Rails.env 

2)將您的證書在APN :: APP表。我寫爲一次性耙任務:

task :init_apn_certs => [:environment] do # NOTE: One-time task... 
    print "Creating APN::App with certs..." 
    app = APN::App.create(:apn_dev_cert => Rails.root.join('config', 'apple_push_notification_development.pem').read, 
         :apn_prod_cert => Rails.root.join('config', 'apple_push_notification_production.pem').read) 
    puts (app.valid? ? "done" : "failed") 
end 

3)自己寫的rake任務繞過APN :: App.send_notifications方法,如與另一個錯誤barfs(一些有關「/配置/ apple_push_notification_development .pem'不存在)。我爲它的代碼:

task :deliver_notifications => [:environment] do 
    print "Delivering APNs for app ids..." 
    apps = APN::App.all 
    apps.each do |app| 
    app.send_notifications 
    print app.id.to_s + "..." 
    end 
    puts "done." 
end 

或者,如果你只有一個應用程序,你可以做到這一點,並用它做:

task :deliver_notifications => [:environment] do 
    APN::App.first.send_notifications 
end 

免責聲明:我還沒有測試這個舞臺上和生產(將在本週結束時這樣做),但我看不出爲什麼它不應該工作。

+0

我在軌道上3.2.5 – 2012-07-25 03:44:38

+0

然後RAILS_ENV肯定不適合你。那麼,我們該如何處理這顆寶石?... – 2012-07-25 04:59:23

+0

問題鏈接是您需要遵循的內容。看最後的評論。 – dineth 2012-10-16 23:16:06

相關問題