我对网络编程很新(或者实际上,它已经很老了,因为我上次与网络混乱是HTML 1.1),但现在需要快速部署Web应用程序.似乎每次我转身时,都会有新的首字母缩略词和技术需要学习(JSON,XMLRPC,GWT,Javascript,Rails等).
这是我的应用必须做的事情:
我已经有了Java脚本和数据库来处理数据.在一台机器上,我可以运行一系列命令行程序来处理传入的数据块并将结果放回到mysql数据库中.那已经存在并且有效.
我想使用这些现有和经过测试的方法构建此任务的Web前端.我现在倾向于这种方法:
这是我的问题:看起来大多数用于Web的Ruby应用程序都会自动尝试构建某种本地数据库.我发现的所有Rails教程都是从创建自己的数据库并与之交互开始的,这正是我不想做的事情.
Rails是适合我的技术,还是使用Ruby DRb?我应该探索一些其他技术吗?
如果Rails或Ruby是正确的东西,我应该看什么?我已经有了编程Ruby书,并且已经将它用于一些后端内容以及使基本的DRb工作.
我用PHP工作太久了,对它感到厌烦.我也想学习一门新语言.
我一直在使用Ruby并喜欢它.我必须在Rails和Sinatra之间做出决定,你会推荐哪一个?是不是Sinatra不能用于构建复杂的应用程序,它只适用于简单的应用程序?
您好,我正在尝试通过阅读Ruby编程语言书来提高我的ruby知识.在工作中阅读编码器我看到很多受访者建议深入研究项目源代码
我决定选择一个项目,因为我能找到更多自给自足.我的选择是Sinatra,因为它是1000 LOC.
这是一个很好的学习项目吗?你是否建议另一个更简单(即更少的LOC)?
我之前曾试图看过铁路机械,但我从它出来吓坏了.
是否可以重写基本URL?
例如,而不是www.host.com/使用www.host.com/blah/作为基础URL等:
get '/' do
...
end
Run Code Online (Sandbox Code Playgroud)
会工作的 www.host.com/blah/
我可以附加到我的所有路线,'/blah/..'但任何宝石等都无法正常工作.
这可以在Rails中轻松完成,我也想在Sinatra中使用它.
我正在使用thin作为我的Sinatra应用程序的服务器.它开始如此:
thin -C config/environment.yml -R config/config.ru start
Run Code Online (Sandbox Code Playgroud)
environment.yml瘦东西在哪里,config.ru你可以在一个rackup文件中找到一般的东西.
我希望能够守护进程(使用瘦配置文件很容易)并像使用apache/tomcat/etc一样停止并重新启动.
当我尝试thin stop或重启或其他各种事情时,我得到:
Can't stop process, no PID found in tmp/pids/thin.pid
实际上,没有这样的文件.我已经尝试/tmp/thin.pid在瘦配置yml中为各种不同的地方指定一个pid文件和位置(例如,很容易).所有这一切都是更改"no PID found in"消息中目录的位置,仍然没有创建pid文件.
有任何想法吗?
我正在开发一个Rails应用程序,它使用API后端来处理用Sinatra编写的AJAX请求.
API与Rails分开运行:
Rails: localhost:3000
API: localhost:9393
在生产中,我们将使用nginx代理对API的请求.
问题是我们在开发模式下没有nginx,我们使用的是瘦身.所以我需要某种Rack中间件,我可以在开发模式中添加它来代理我的请求.
有人能给我一个如何做到这一点的例子吗?
单击表单中的按钮将发送POST请求以由以下代码处理.
post '/register' do
#send post request to http://www.randomsite.com
#parse response
#do something with it
@user = User.first(:name => params['regUsername'])
if @user == nil
@user = User.create(
:name => params['regUsername'],
:pass => Password.create(params['regPassword']),
:email => params['regEmail'],
:created_date => Time.now
)
redirect '/'
else
"User already exists."
end
end
Run Code Online (Sandbox Code Playgroud)
如何从Ruby代码中向另一个网站发送另一个POST请求?
我的sinatra应用程序包含在gem中.这意味着资产(css/js)存在于gem中.该应用程序动态写入生成的图像并为其提供服务; 目前正在写入公共目录并为其提供服务.
我更喜欢不在gem目录中编写生成的图像,而是在实现此gem的web应用程序下编写某些类型的"缓存"目录.
Gem安装在/var/www/TE/shared/gems/ruby/1.8/gems/tubemp-0.6.0,所以资产是在例如/var/www/TE/shared/gems/ruby/1.8/gems/tubemp-0.6.0/lib/public/css/.
Gem部署在一个简单的机架应用程序中/var/www/TE/current/,所以我更愿意编写和提供缩略图/var/www/TE/current/public.
但是,自定义public-dir的设置只允许设置一个目录:
set :public_folder, File.join(Dir.pwd, "public")
Run Code Online (Sandbox Code Playgroud)
打破资产服务; Dir.pwd是Rack应用程序的目录.公共现在是Rack-app下的目录,但这不是资产所在的地方:它们生活在宝石中的"公共"之下.
set :public_folder, File.join(gemdir, "public")
Run Code Online (Sandbox Code Playgroud)
中断生成的缩略图的服务.
我可以重写应用程序,因此它通过Sinatra服务资产或缩略图,但这似乎是一些开销.
这是唯一的方法吗?或者有没有办法让Sinatra有两个或更多公共目的地来提供静态物品?
我正在运行本地puma服务器,我无法在SSL下加载资源.
我有一个本地签名证书.
我正在尝试使用以下配置运行服务器:
puma -b 'ssl://127.0.0.1:9292?key=/path/to/certs/localhost.unecrypted.key&cert=/path/to/certs/localhost.crt'
Run Code Online (Sandbox Code Playgroud)
现在,当我访问https://localhost:9292或https://127.0.0.1:9292浏览器只是旋转,并没有来自服务器的响应.没有资源返回.它曾两次向我展示HTML标题标签,但几乎总是我什么都没得到.
任何的想法?其他想法?真的需要在本地运行这个应用程序的https版本,我无法弄清楚如何做到这一点.
编辑:记录初始请求,但没有响应:
127.0.0.1 - - [04/Sep/2013 11:29:15] "GET / HTTP/1.1" 200 1265 0.0397
Run Code Online (Sandbox Code Playgroud)
有时候我会收到这个错误:
013-09-04 11:30:20 -0400: Read error: #<Errno::EPIPE: Broken pipe>
/Users/wesbos/.rvm/gems/ruby-1.9.3-p429@sinatra/gems/puma-2.3.2/lib/puma/minissl.rb:56:in `write'
/Users/wesbos/.rvm/gems/ruby-1.9.3-p429@sinatra/gems/puma-2.3.2/lib/puma/minissl.rb:56:in `write'
/Users/wesbos/.rvm/gems/ruby-1.9.3-p429@sinatra/gems/puma-2.3.2/lib/puma/server.rb:635:in `fast_write'
/Users/wesbos/.rvm/gems/ruby-1.9.3-p429@sinatra/gems/puma-2.3.2/lib/puma/server.rb:484:in `handle_request'
/Users/wesbos/.rvm/gems/ruby-1.9.3-p429@sinatra/gems/puma-2.3.2/lib/puma/server.rb:248:in `process_client'
/Users/wesbos/.rvm/gems/ruby-1.9.3-p429@sinatra/gems/puma-2.3.2/lib/puma/server.rb:147:in `block in run'
/Users/wesbos/.rvm/gems/ruby-1.9.3-p429@sinatra/gems/puma-2.3.2/lib/puma/thread_pool.rb:92:in `call'
/Users/wesbos/.rvm/gems/ruby-1.9.3-p429@sinatra/gems/puma-2.3.2/lib/puma/thread_pool.rb:92:in `block in spawn_thread'
Run Code Online (Sandbox Code Playgroud) 所以我试图使用rpush来使用这个gem的移动应用程序的推送通知:https://github.com/rpush/rpush.我正在使用sinatra框架.但我一直得到这个错误,即使我在我的文件顶部写了 - > require'rpush'.有人在红宝石中有经验可以帮助我吗?我是红宝石的新手所以请耐心等待.这是我的代码
require 'rpush'
Module Notifier
def rpush_client
app = Rpush::Gcm::App.new
app.name = "App-Name"
app.auth_key = "XXXXXXXXXXXXXXX"
app.connections = 1
app.save!
end
def notify(user_id,alert)
rpush_client
session = db_find_one('dbname.sessions',{user_id: user_id})
if session.present?
device = session['devices'].first
token = device['device_token']
n = Rpush::Gcm::Notification.new
n.app = Rpush::Gcm::App.find_by_name("App-Name")
n.registration_ids = ["token", token]
n.data = { message: alert }
n.save!
Rpush.push
end
end
end
Run Code Online (Sandbox Code Playgroud)
我知道这是一个愚蠢的问题,但厌倦了在这里寻找它.